Jackson

개요 OOP와 ORM에서 다형성은 코드의 재사용성과 유지 보수성을 극대화 하는 아름다운 매커니즘이다. 그런데 이것을 ORM과 접목시켰을 때, JSON이 기본적으로 다형성을 제공하지 않기 때문에 상위 클래스나 인터페이스를 통한 다양한 하위 클래스의 객체를 직렬화 역직렬화 하는 것이 까다로울 수 있다. 이를 해결하기 위해 Jackson과 같은 라이브러리에서는 @JsonSubTypes와 같은 애노테이션을 제공하여 다형적 구조를 효과적으로 관리할 수 있게 도와준다. 이번 글에서는 Jackson의 @JsonSubTypes 애노테이션을 중심으로, 다형성 JSON 데이터를 올바르게 직렬화하고 역직렬화하는 방법에 대해 알아보자. 내용@JsonSubTypes의 기본 개념 @JsonSubTypes는 Jackson 라이브..
상황프론트에서 특정 기능을 사용 유무를 판단하기 위한 boolean 값의 필드를 디비에 추가해야 할 일이 있었다.해당 기능은 CUD API를 제공해야 하는 기획이었으므로 DTO에도 필드값과 대응되는 멤버변수를 추가해주었다.그러나 API를 태워본 결과 결과 데이터 바인딩이 제대로 되지 않는 이슈가 있었다. 원인스프링이 내부적으로 Data Mapping을 할 때 사용하는 직렬화/역직렬화 라이브러리인 Jackson에 버그가 있었다. Jackson 라이브러리는 Java 객체를 JSON으로 직렬화할 때 get이나 is로 시작하는 메소드를 찾아서 해당 값들을 JSON 속성으로 매핑한다. 그런데 Jackson 라이브러리의 특정 버전에서는 is로 시작하는 메소드의 경우 이를 직렬화 및 역직렬화 대상에서 제외시키는 버그..