문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 다음 판 양쪽 다음 판 | ||
java:jackson [2018/08/09 11:08] kwon37xi [JSON Filter] |
java:jackson [2020/07/22 14:27] kwon37xi |
||
---|---|---|---|
줄 1: | 줄 1: | ||
====== Java Jackson JSON Library ====== | ====== Java Jackson JSON Library ====== | ||
+ | * [[java: | ||
* [[http:// | * [[http:// | ||
* [[http:// | * [[http:// | ||
줄 10: | 줄 11: | ||
* [[http:// | * [[http:// | ||
- | ===== JSON Filter ===== | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * [[https:// | ||
- | * [[http:// | ||
- | * [[https:// | ||
- | * [[http:// | ||
- | * [[https:// | ||
- | * Spring 4.2 부터 '' | ||
- | * [[http:// | ||
- | * [[https:// | ||
- | <code java> | ||
- | @RequestMapping(method=RequestMethod.GET) | ||
- | public MappingJacksonValue getMovies(@AuthenticatedUser TutorialUser user){ | ||
- | List< | ||
- | MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(movieList); | ||
- | |||
- | mappingJacksonValue.setFilters(new SimpleFilterProvider().addFilter(" | ||
- | SimpleBeanPropertyFilter.filterOutAllExcept(user!=null && user.isAdmin() ? all : limited))); | ||
- | | ||
- | return mappingJacksonValue; | ||
- | } | ||
- | </ | ||
===== @JsonView ===== | ===== @JsonView ===== | ||
* 객체의 필드를 선별적으로 직렬화 할 수 있다. | * 객체의 필드를 선별적으로 직렬화 할 수 있다. | ||
줄 49: | 줄 23: | ||
* 해당 클래스 JSON 문자열을 받아서 객체를 생성할 때 변환기를 직접 만들고자 할 때 구현한다. | * 해당 클래스 JSON 문자열을 받아서 객체를 생성할 때 변환기를 직접 만들고자 할 때 구현한다. | ||
* [[https:// | * [[https:// | ||
+ | * [[https:// | ||
+ | <code java> | ||
+ | public class Customer { | ||
+ | private String id; | ||
+ | private String name; | ||
+ | private String address; | ||
+ | |||
+ | public Customer() { | ||
+ | } | ||
+ | |||
+ | @JsonCreator | ||
+ | public Customer( | ||
+ | @JsonProperty(" | ||
+ | @JsonProperty(" | ||
+ | @JsonProperty(" | ||
+ | System.out.println(" | ||
+ | this.id = id; | ||
+ | this.name = name; | ||
+ | this.address = address; | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public String toString() { | ||
+ | return " | ||
+ | } | ||
+ | } | ||
+ | </ | ||
===== Performance ===== | ===== Performance ===== | ||
* [[http:// | * [[http:// | ||
줄 81: | 줄 81: | ||
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
+ | |||
===== Pretty Print ===== | ===== Pretty Print ===== | ||
<code java> | <code java> | ||
줄 96: | 줄 97: | ||
* Jackson 2 '' | * Jackson 2 '' | ||
* 성능 저하 요소가 될 수 있으므로 Java 8 이상에서는 가급적이면 '' | * 성능 저하 요소가 될 수 있으므로 Java 8 이상에서는 가급적이면 '' | ||
+ | |||
+ | ===== Hibernate ===== | ||
+ | * [[java: | ||
+ | * Lazy Loading 필드일 경우 그냥 null 처리하고 넘어간다. 그러나 이미 로딩이 돼 있으면 직렬화 한다. | ||
+ | * Lazy Loading 대상 필드의 값을 가져오는 getter가 존재한다면 '' | ||
+ | * [[https:// | ||
+ | * 양방향 관계에 대해 [[https:// | ||
+ | public class User { | ||
+ | public int id; | ||
+ | public String name; | ||
+ | |||
+ | // @JsonBackReference 애노테이션이 붙으면 직렬화를 하지 않는다. | ||
+ | @JsonBackReference | ||
+ | public List< | ||
+ | } | ||
+ | |||
+ | public class Item { | ||
+ | public int id; | ||
+ | public String itemName; | ||
+ | |||
+ | @JsonManagedReference | ||
+ | public User owner; | ||
+ | } | ||
+ | </ | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | * '' | ||
+ | |||
+ | ===== @JsonRawValue ===== | ||
+ | * [[https:// | ||
+ | * String 필드게 JSON 문자열이 저장돼 있을 경우 이를 JSON 으로 간주하고 리턴 | ||
+ | * 직렬화에서는 작동하지만 역직렬화에서는 작동하지 않는다. | ||
+ | * [[https:// | ||
+ | |||
+ | |||
+ | ===== JsonNodeFactory ===== | ||
+ | * [[https:// | ||
+ | * '' | ||
+ | * [[java: | ||
+ | |||
+ | <code java> | ||
+ | JsonNodeFactory.instance.objectNode().put(" | ||
+ | .put(" | ||
+ | .put(" | ||
+ | .toString(); | ||
+ | </ | ||
+ | |||
+ | ===== Java 8 ===== | ||
+ | * [[https:// | ||
+ | * Jackson 2 까지는 다음과 같이 모듈들을 추가해줘야 하며 Jackson 3 부터는 Java 8이 필수라서 기본 지원이 된다. | ||
+ | |||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
===== 참고 ===== | ===== 참고 ===== | ||
줄 108: | 줄 182: | ||
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
+ | * [[https:// |