스프링 부트에서는 Json -> Object, Object -Json 의 변환은
스프링부트 웹 스타타 킷- org.springframework.boot:spring-boot-starter-web -에 기본적으로 포함된 jackson 라이브러리를 사용한다.
스트링부트의 의존성 라이브러리를 확인해보면 아래와 같이 별도로 라이브러를 추가하지 않더라도
스프링부트의 기본 스타터킷에 포함되어 있는 걸 확인할 수 있다.
특히, 스프링부트로 API 서비스를 만드는 경우에는 응답전문은 대부분 json유형으로 사용하기 때문에
자바의 Object(DTO)에서 Json으로 변환하는데 이 라이브러리가 필수적으로 사용되게 되는데, `@RestController`어노테이션을 사용하는 경우, 요청과 응답의 객체변환 및 직렬화/역직렬화를 자동으로 이 jackson 라이브러리가 담당하게 된다.
대부분 Object - Json간 변환은 자동으로 처리하도록 맡겨도 큰 문제는 없는데
예외적으로 객체의 특정항목들을 특정조건으로 제어할 필요가 있을때는 별도의 처리가 필요하고, 그럴때 필요한 어노테이션들이 존재한다.
그 중에서 유용하다고 생각되는 것들을 생각나는대로 정리해 보기로 한다.
(기억력이 점점 나빠져(ㅡㅡ) 단순한 내용이라도 이젠 기록해놓지 않으면 곤란한 상황이 생기곤 한다.)
Null Value인 필드에 대한 제외처리
클래스 레벨
@JsonInclude(Include.NON_NULL)
public class MyDto { ... }
MyDto객체가 Null이라면 JSON변환대상에 제외된다.
특정 필드
public class MyDto {
@JsonInclude(Include.NON_NULL)
private String stringValue;
private int intValue;
// standard getters and setters
}
stringValue값이 Null이라면 JSON변환대상에서 제외된다. NOT_EMPTY와는 구별해서 사용해야 한다.
전역
ObjectMapper jsonMapper = new ObjectMapper();
jsonMapper.setSerializationInclusion(Include.NON_NULL);
ResponseDto dtoObject = new ResponseDto();
String jsonStr = jsonMapper.writeValueAsString(dtoObject);
ObjectMapper를 명시적으로 코드내에서 사용할때 매퍼자체에 룰을 적용할 수 있다.
적용한 룰은 이 매퍼로 변환하는 모든 객체에 적용된다.
@JsonInclude 어노테이션의 Include옵션값은 NON_NULL외에도 여러가지가 있으니 필요한 케이스에 적절히 활용하면 되겠다.
어노테이션의 옵션값이 대부분 enum으로 정의되어 있기 때문에 항목명만 봐도 대부분 그 의미를 직관적으로 알 수 있다.
- Include.ALWAYS
- Include.NON_ABCENT
- Include.NON_EMPTY
- Include.NON_DEFAULT
- Include.CUSTOM
- Include.USE_DEFAULTS
사실 NON_NULL, NON_EMPTY만 사용하기 때문에 나머지 옵션들에 대해서는 그 사용목적에 대해서는 정확히 알지 못하지만 이름으로 충분히 유추가 가능할 것 같다.
특정 조건에 따른 필드값 제외처리
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
이 경우 필드값을 쓰는 경우에만 접근이 허용됨. 그 외는 제외됨
-
Access 타입 종류
-
AUTO (기본)
-
READ_ONLY
-
WRITE_ONLY
-
READ_WRITE
-
최근댓글