스프링 부트에서는 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

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기