사용자 도구

사이트 도구


java:jackson

문서의 이전 판입니다!


Java Jackson JSON Library

@JsonView

@JsonCreator

  • 해당 클래스 JSON 문자열을 받아서 객체를 생성할 때 변환기를 직접 만들고자 할 때 구현한다.

Performance

Config 설정

ObjectMapper objectMapper = new ObjectMapper();
 
// 모르는 property에 대해 무시하고 넘어간다. DTO의 하위 호환성 보장에 필요하다.
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
 
// ENUM 값이 존재하지 않으면 null로 설정한다. Enum 항목이 추가되어도 무시하고 넘어가게 할 때 필요하다.
objectMapper.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true);

Java 8 설정

ObjectMapper mapper = new ObjectMapper()
   .registerModule(new ParameterNamesModule())
   .registerModule(new Jdk8Module())
   .registerModule(new JavaTimeModule());

Bidirectional Relation 양방향 관계

Pretty Print

// 전역설정
objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
 
// Writer 당 설정
new ObjectMapper()
.writer()
.withDefaultPrettyPrinter()
.writeValueAsString(객체);

setDateFormat 주의

  • Jackson 2 ObjectMapper.setDateFormat() 으로 SimpleDateFormat을 지정할 수 있는데 이 경우 SimpleDateFormat은 Thread Safe 하지 못해서 Jackson 이 매번 clone을 해서 재생성해서 날짜를 포맷팅한다.
  • 성능 저하 요소가 될 수 있으므로 Java 8 이상에서는 가급적이면 LocalDateTime 등을 사용하는게 좋겠다.

Hibernate

  • Hibernate 사용시 LazyLoading 문제 해소 모듈
  • Lazy Loading 필드일 경우 그냥 null 처리하고 넘어간다. 그러나 이미 로딩이 돼 있으면 직렬화 한다.
  • Lazy Loading 대상 필드의 값을 가져오는 getter가 존재한다면 @JsonIgnore를 하거나 미리 로딩하지 않으면 다시 Lazy Loading Exception 이 발생한다.
  • 양방향 관계에 대해 Jackson - Bidirectional Relationships JPA Entity 직렬화 방법들 참조
    public class User {
        public int id;
        public String name;
     
        // @JsonBackReference 애노테이션이 붙으면 직렬화를 하지 않는다.
        @JsonBackReference
        public List<Item> userItems;
    }
     
    public class Item {
        public int id;
        public String itemName;
     
        @JsonManagedReference
        public User owner;
    }
    {
     "id":2,
     "itemName":"book",
     "owner":
        {
            "id":1,
            "name":"John"
        }
    }
  • @JsonIdentityInfo 사용시에는 양방향 관계에서 Entity Id 만 직렬화해준다.

@JsonRawValue

참고

java/jackson.1549537492.txt.gz · 마지막으로 수정됨: 2019/02/07 20:04 저자 kwon37xi