문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
|
java:jackson [2019/11/21 15:28] kwon37xi |
java:jackson [2023/10/04 14:47] (현재) kwon37xi |
||
|---|---|---|---|
| 줄 1: | 줄 1: | ||
| ====== Java Jackson JSON Library ====== | ====== Java Jackson JSON Library ====== | ||
| * [[java: | * [[java: | ||
| + | * [[java: | ||
| * [[http:// | * [[http:// | ||
| * [[http:// | * [[http:// | ||
| 줄 19: | 줄 20: | ||
| * Spring 4.1 부터 '' | * Spring 4.1 부터 '' | ||
| * [[https:// | * [[https:// | ||
| + | * [[https:// | ||
| ===== @JsonCreator ===== | ===== @JsonCreator ===== | ||
| * 해당 클래스 JSON 문자열을 받아서 객체를 생성할 때 변환기를 직접 만들고자 할 때 구현한다. | * 해당 클래스 JSON 문자열을 받아서 객체를 생성할 때 변환기를 직접 만들고자 할 때 구현한다. | ||
| 줄 57: | 줄 58: | ||
| ObjectMapper objectMapper = new ObjectMapper(); | ObjectMapper objectMapper = new ObjectMapper(); | ||
| - | // 모르는 property에 대해 무시하고 넘어간다. DTO의 하위 호환성 보장에 필요하다. | + | objectMapper |
| - | objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, | + | |
| + | .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, | ||
| - | // ENUM 값이 존재하지 않으면 null로 설정한다. Enum 항목이 추가되어도 무시하고 넘어가게 할 때 필요하다. | + | |
| - | objectMapper.configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, | + | .configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, |
| + | // 시간을 timestamp 숫자가 아닌, 문자열로 포맷팅한다. 기본 ISO 포맷 | ||
| + | .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, | ||
| </ | </ | ||
| - | ===== Java 8 설정 ===== | ||
| - | * https:// | ||
| - | |||
| - | <code java> | ||
| - | ObjectMapper mapper = new ObjectMapper() | ||
| - | | ||
| - | | ||
| - | | ||
| - | </ | ||
| - | |||
| - | * [[https:// | ||
| ===== Bidirectional Relation 양방향 관계 ===== | ===== Bidirectional Relation 양방향 관계 ===== | ||
| 줄 95: | 줄 88: | ||
| ===== setDateFormat 주의 ===== | ===== setDateFormat 주의 ===== | ||
| - | | + | * **'' |
| - | | + | |
| ===== Hibernate ===== | ===== Hibernate ===== | ||
| 줄 140: | 줄 132: | ||
| + | ===== @JsonInclude ===== | ||
| + | * [[https:// | ||
| + | * '' | ||
| + | * [[https:// | ||
| ===== JsonNodeFactory ===== | ===== JsonNodeFactory ===== | ||
| * [[https:// | * [[https:// | ||
| 줄 152: | 줄 148: | ||
| </ | </ | ||
| + | ===== Java 8 ===== | ||
| + | * [[https:// | ||
| + | * Jackson 2 까지는 다음과 같이 모듈들을 추가해줘야 하며 Jackson 3 부터는 Java 8이 필수라서 기본 지원이 된다. | ||
| + | |||
| + | < | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | < | ||
| + | < | ||
| + | < | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | <code java> | ||
| + | // Up to Jackson 2.9: (but not with 3.0) | ||
| + | ObjectMapper mapper = new ObjectMapper() | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | </ | ||
| + | * '' | ||
| + | |||
| + | ===== Jackson 2.10 부터 ObjectMapper 생성 방식 변경됨 ===== | ||
| + | <code java> | ||
| + | JsonMapper objectMapper = JsonMapper.builder() | ||
| + | .addModules(new ParameterNamesModule(), | ||
| + | // 모르는 property 를 역직렬화 할 때 오류없이 무시하게 한다. | ||
| + | .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, | ||
| + | // 모르는 ENUM 값을 역직렬화 할 때 null로 취급하게 한다. | ||
| + | .configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_AS_NULL, | ||
| + | // 시간 관련 객체(LocalDateTime, | ||
| + | .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, | ||
| + | // 숫자를 문자로 직렬화하기, | ||
| + | .enable(JsonWriteFeature.WRITE_NUMBERS_AS_STRINGS) | ||
| + | .defaultTimeZone(TimeZone.getDefault()) | ||
| + | .defaultLocale(Locale.getDefault()) | ||
| + | .build(); | ||
| + | </ | ||
| + | |||
| + | ===== Java 16 Record ===== | ||
| + | * [[https:// | ||
| + | * Jackson >= 2.12.0 부터 [[java: | ||
| ===== 참고 ===== | ===== 참고 ===== | ||
| * [[http:// | * [[http:// | ||
| 줄 167: | 줄 212: | ||
| * [[https:// | * [[https:// | ||
| * [[https:// | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||