Jackson 라이브러리
Table of contents
Jackson
JSON 데이터 구조를 처리해주는 라이브러리
Spring Framework와 함께 사용할 때, REST API의 요청 및 응답에서 JSON 직렬화 및 역직렬화 과정을 자동으로 처리해준다.
@GetMapping
과 같은 어노테이션을 사용하여 REST 엔드포인트를 정의하면, Spring은 자동으로 요청 본문을 Java 객체로 변환하고, 응답 객체를 JSON으로 변환한다.
기본적으로 프로퍼티(Property)로 동작
Java는 프로퍼티를 제공하는 문법이 없고, 그래서 보통 Getter 와 Setter의 이름 명명 규칙으로 정해진다. Jackson은 기본적으로 Getter를 기준으로 프로퍼티를 도출한다.
그래서 다음과 같이 필드가 없는 경우에도 Json객체로 변환이 가능하다.
public class ProductInfoResponse {
public String getId() {
return "1";
}
public String getProduct_nm() {
return "강아지인형";
}
}
다시 말해, 반대로 클래스에 필드가 존재하더라도 Getter 메서드가 없으면 JSON 데이터로 변환 시 필요한 정보가 없을 수 있다.
데이터 매핑 방법
@Getter
@Getter
public class ProductInfoResponse {
private Long id; /* Key */
private String product_nm; /* 제품명 */
}
캡슐화 유지 가능
Lombok 사용으로 코드의 가독성이 높음
@JsonProperty
public class ProductInfoResponse {
@JsonProperty("id")
private Long id; /* Key */
@JsonProperty("product_nm")
private String productNm; /* 제품명 */
}
- 필드에 직접 접근하기 때문에 캡슐화가 깨짐
@JsonAutoDetect
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
public class ProductInfoResponse {
private Long id; /* Key */
private String productNm; /* 제품명 */
}
필드에 직접 접근하기 때문에 캡슐화가 깨짐
멤버변수 뿐만 아니라, Getter, Setter의 데이터 매핑 정책도 정할 수 있음
제외 :
@JsonIgnore
이 외에도 여러가지 설정을 할 수 있는데, 어쨌든 @JsonProperty
나 @JsonAutoDetect
는 필드에 직접 접근하여 JSON 직렬화 및 역직렬화를 수행하는 방식이므로, 캡슐화를 유지하기 위해서 안전하게 @Getter
를 사용하는 것이 좋다.
📘 참고자료
Subscribe to my newsletter
Read articles from Myonee directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by