BE/Java

[Java] Jackson 라이브러리

baek-dev 2025. 1. 7. 18:58

Java객체와 JSON간의 직렬화 및 역직렬화를 간단하고 효율적으로 처리할 수 있는 라이브러리

주로 Spring Boot와 같은 프레임워크에서 JSON데이터를 처리하는데 기본적으로 사용된다


Jackson 어노테이션과 주요 속성

 

1. @JsonProperty

  • JSON 속성과 Java 필드 간의 매핑을 설정.
  • 주요 속성:
  • value: JSON 속성 이름을 설정.
  • required: 필드가 JSON 데이터에 필수인지 여부를 설정.
  • access: 직렬화/역직렬화 접근 수준(READ_ONLY, WRITE_ONLY, READ_WRITE).

 

2. @JsonIgnore

  • 특정 필드를 JSON 직렬화 및 역직렬화에서 제외.
  • 이 필드는 JSON에 포함되지 않음.

 

3. @JsonIgnoreProperties

  • 여러 필드를 한 번에 무시.
  • 주요 속성:
  • value: 무시할 속성 이름 배열.
  • allowGetters: getter만 허용하고 나머지는 무시할지 설정.
  • allowSetters: setter만 허용하고 나머지는 무시할지 설정.

 

4. @JsonIgnoreType

  • 특정 클래스 전체를 무시.
  • 해당 클래스 타입의 객체는 직렬화 및 역직렬화에서 제외됨.

 

4. @JsonInclude

  • 특정 조건에 따라 필드를 JSON에 포함할지 설정.
  • 주요 속성:
  • value: 조건 설정(ALWAYS, NON_NULL, NON_EMPTY, NON_DEFAULT 등)

 

6. @JsonSetter

  • JSON 속성 값을 객체의 필드에 매핑할 setter를 명시적으로 지정.
  • 주요 속성:
  • value: JSON 속성 이름.

 

7. @JsonGetter

  • 필드를 JSON에 직렬화할 때 사용할 getter를 명시적으로 지정.
  • 주요 속성:
  • value: JSON 속성 이름.

 

8. @JsonAnySetter

  • JSON에서 정의되지 않은 속성을 동적으로 처리.
  • JSON의 추가 속성을 Map으로 처리할 때 사용.

 

9. @JsonAnyGetter

  • Map 타입의 데이터를 JSON으로 변환할 때 사용.

 

10. @JsonValue

  • JSON 직렬화에서 객체의 특정 값을 사용하도록 설정.

 

11. @JsonRawValue

  • 필드 값을 JSON 문자열로 그대로 처리.
  • JSON으로 변환 시 문자열 값을 이스케이프하지 않고 그대로 포함.

 

12. @JsonUnwrapped

  • 객체의 필드 값을 JSON의 루트 수준 속성으로 직렬화/역직렬화.
  • JSON 구조를 평평하게(flatten) 만듦.

 

13. @JsonManagedReference

  • 직렬화 중 순환 참조 문제를 해결.
  • 주로 부모 엔티티에 사용.

 

14. @JsonBackReference

  • 순환 참조 문제 해결.
  • 자식 엔티티에 사용하며 @JsonManagedReference와 쌍으로 동작.

 

15. @JsonIdentityInfo

  • 엔티티의 고유 식별자를 사용하여 순환 참조 문제 해결.
  • 주요 속성:
  • generator: ID를 생성할 방식(ObjectIdGenerators).
  • property: JSON에서 사용할 식별자 속성 이름.

 

16. @JsonTypeInfo

  • 다형성(polymorphic) 타입 정보를 포함.
  • 주요 속성:
  • use: 타입 정보 삽입 방식.
  • include: 타입 정보를 JSON 어디에 포함할지 설정.
  • property: 타입 정보를 나타낼 JSON 속성 이름.
  • visible: JSON에서 타입 속성을 유지할지 여부.

 

17. @JsonCreator

  • JSON 데이터로부터 객체를 생성하는 생성자를 명시적으로 지정.
  • 주로 불변 객체(Immutable Object) 생성에 사용.

 

18. @JsonFormat

  • 날짜, 시간, 숫자 등의 형식을 JSON으로 변환할 때 사용.
  • 주요 속성:
  • pattern: 형식 지정(예: yyyy-MM-dd).
  • timezone: 시간대 설정.
  • shape: 형식 모양(STRING, NUMBER 등).

 

19. @JsonRootName

  • JSON 루트 이름을 설정.
  • 루트 이름을 JSON 데이터의 최상위 요소로 추가.

 

20. @JsonDeserialize

  • 커스텀 디시리얼라이저(Deserializer)를 설정.
  • 주요 속성:
  • using: 사용자 정의 디시리얼라이저 클래스 지정.

 

21. @JsonSerialize

  • 커스텀 시리얼라이저(Serializer)를 설정.
  • 주요 속성:
  • using: 사용자 정의 시리얼라이저 클래스 지정.

 

22. @JsonFilter

  • JSON 출력 시 조건부 필터링을 적용.
  • 필터를 등록하고, 원하는 필드만 선택적으로 포함하거나 제외.

 

23. @JsonSubTypes

  • 다형성 타입의 하위 클래스 정보를 설정.
  • 주요 속성:
  • value: 하위 클래스 정보를 배열 형태로 지정.

 

24. @JacksonInject

  • Jackson이 객체를 생성할 때 의존성을 주입하도록 설정.

 

25. @JsonView

  • JSON 직렬화 시 특정 뷰를 정의하여 다른 형태로 데이터를 출력.

 

 

 

 

출처 : ChatGPT

'BE > Java' 카테고리의 다른 글

[Java] Servlet  (2) 2025.01.10
[Java] HttpServletRequest  (0) 2025.01.08
[JPA] N + 1 문제  (0) 2025.01.06
[Java] Generic 제너릭  (0) 2025.01.04
[Java] enum  (0) 2025.01.01