Jackson 라이브러리

MyoneeMyonee
2 min read

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를 사용하는 것이 좋다.

📘 참고자료

https://velog.io/@chosj1526/Spring-Jackson-이란

https://fasterxml.github.io/jackson-annotations/javadoc/2.9/com/fasterxml/jackson/annotation/JsonAutoDetect.Visibility.html

0
Subscribe to my newsletter

Read articles from Myonee directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Myonee
Myonee