사용자 도구

사이트 도구


java:jackson

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
다음 판 양쪽 다음 판
java:jackson [2020/07/22 14:31]
kwon37xi [Java 8]
java:jackson [2020/07/22 17:55]
kwon37xi [Java 8]
줄 57: 줄 57:
 ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
  
-// 모르는 property에 대해 무시하고 넘어간다. DTO의 하위 호환성 보장에 필요하다. +objectMapper 
-objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);+  // 모르는 property에 대해 무시하고 넘어간다. DTO의 하위 호환성 보장에 필요하다. 
 +  .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
  
-// ENUM 값이 존재하지 않으면 null로 설정한다. Enum 항목이 추가되어도 무시하고 넘어가게 할 때 필요하다. +  // ENUM 값이 존재하지 않으면 null로 설정한다. Enum 항목이 추가되어도 무시하고 넘어가게 할 때 필요하다. 
-objectMapper.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true);+  .configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true); 
 +  // 시간을 timestamp 숫자가 아닌, 문자열로 포맷팅한다. 기본 ISO 포맷 
 +  .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
 </code> </code>
  
-===== Java 8 설정 ===== 
-  * https://github.com/FasterXML/jackson-modules-java8 
- 
-<code java> 
-ObjectMapper mapper = new ObjectMapper() 
-   .registerModule(new ParameterNamesModule()) 
-   .registerModule(new Jdk8Module()) 
-   .registerModule(new JavaTimeModule()); 
-</code> 
- 
-  * [[https://github.com/joschi/jackson-datatype-threetenbp|Java 7용 310 date time backport Jackson Module]] 
  
 ===== Bidirectional Relation 양방향 관계 ===== ===== Bidirectional Relation 양방향 관계 =====
줄 178: 줄 170:
    .registerModule(new JavaTimeModule()); // new module, NOT JSR310Module    .registerModule(new JavaTimeModule()); // new module, NOT JSR310Module
  
-// with 3.0 (or with 2.10 as alternative) 
-ObjectMapper mapper = JsonMapper.builder() // or different mapper for other format 
-   .addModule(new ParameterNamesModule()) 
-   .addModule(new Jdk8Module()) 
-   .addModule(new JavaTimeModule()) 
-   // and possibly other configuration, modules, then: 
-   .build(); 
 </code> </code>
 +  * ''SerializationFeature.WRITE_DATES_AS_TIMESTAMPS: false'' 설정이 있어야만 ''LocalDateTime'' 등을 ''ISO_LOCAL_DATE_TIME'' format 등으로 직렬화한다.
 +
 +===== Jackson 2.10 부터 ObjectMapper 생성 방식 변경됨 =====
 +<code java>
 +JsonMapper objectMapper = JsonMapper.builder()
 +    .addModules(new ParameterNamesModule(), new Jdk8Module(), new JavaTimeModule())
 +    // 모르는 property 를 역직렬화 할 때 오류없이 무시하게 한다.
 +    .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
 +    // 모르는 ENUM 값을 역직렬화 할 때 null로 취급하게 한다.
 +    .configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, true)
 +    // 시간 관련 객체(LocalDateTime, java.util.Date)를 직렬화 할 때 timestamp 숫자값이 아닌 포맷팅 문자열로 한다.
 +    .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
 +    // 숫자를 문자로 직렬화하기, BigDecimal 보호?
 +    .enable(JsonWriteFeature.WRITE_NUMBERS_AS_STRINGS)
 +    .defaultTimeZone(TimeZone.getDefault())
 +    .defaultLocale(Locale.getDefault())
 +    .build();
 +</code>
 +
 ===== 참고 ===== ===== 참고 =====
   * [[http://www.baeldung.com/jackson-serialize-dates|Jackson Date]]<code java>   * [[http://www.baeldung.com/jackson-serialize-dates|Jackson Date]]<code java>
java/jackson.txt · 마지막으로 수정됨: 2023/10/04 14:47 저자 kwon37xi