@JsonCreator를 알아보기 전에 Jackson에 대해서 알아야한다
Jackson이란 무엇일까?
Jackson이란
JSON 데이터를 Java 객체로 변환하거나,
Java 객체를 JSON 으로 만드는데
사용이 된다
만든다? 만든다라는 용어는 너무 범용이 크지 않나?
이러한 과정을 용어적으로는 밑에와 같이 표현한다.
직렬화(Serialization): Java 객체를 JSON 데이터로 변환하는 과정.
객체의 상태를 저장하고 전송하기 위해 JSON 형식으로 변환하는 것을 의미
역직렬화(Deserialization): JSON 데이터를 Java 객체로 변환하는 과정.
JSON 데이터를 읽어와서 해당 데이터에 대응하는 Java 객체를 생성하는 것을 의미
그럼 Jackson은 어떻게 직렬화와 역직렬화를 진행하는가?
Jackson은 객체의 기본 생성자와 Getter/Setter 메서드를 사용하여
JSON 데이터를 Java 객체로 역직렬화하고
Java 객체를 JSON 데이터로 직렬화한다.
이는 클래스의 구조를 분석하여 필드와 메서드를 자동으로 매핑하는 방식!!
그렇다면 이제 @JsonCreator은 무엇일까??
@JsonCreator 애노테이션은
Jackson 라이브러리에서 지원하는
JSON 데이터를 Java 객체로 변환할 때 사용하는 생성자를 지정하는 데 사용
이 애노테이션을 사용하면 Jackson은 JSON 데이터를 해당 생성자의 매개변수에 매핑하여 객체를 생성한다.
Jackson은 이 과정에서 Java 객체를 생성하고 초기화하기 위해 어떤 생성자를 사용할지 결정하는데
여러 개의 생성자가 있을 경우에는 어떤 생성자를 사용해야 할지를 정확하게 알려주어야 한다.
이 때 @JsonCreator 애노테이션을 사용하여 Jackson에게 사용할 생성자를 명시적으로 지정할 수 있다!!
@JsonCreator 애노테이션이 붙은 생성자는 역직렬화 과정에서 JSON 데이터를 객체로 변환하기 위해 사용된다.
이 생성자의 매개변수에는 각각의 JSON 필드와 매핑될 값들이 들어가게 된다.
이렇게 하면 Jackson은 JSON 데이터를 해당 생성자의 매개변수에 매핑하여 객체를 생성할 수 있게 된다.
그럼 이걸 언제 사용하고 어떻게 사용해?
Jackson이 알아서 변환해주는거 아니였어?
맞다 하지만 모든 데이터를 Jackson이 변환해 줄 수는 없고 안되는 예외의 경우도 있기에
이때는 개발자가 명시해 줘야만한다!!
ENUM CLASS

DTO

여러 경우가 있겠지만 필자는 클라이언트에서 날라온 StorageMethod
String 타입을 열거형 상수로 받을 수 있도록 변환하는데 사용을 하였다.
잘못된 타입이 들어오면 @NotNull 유효성 검사에서 걸리도록...
생성자 위에 @JsonCreator를 붙여도 되지만
정적 팩토리 메서드 위에 붙여도 작동이 된다!!!
'스프링' 카테고리의 다른 글
| PATCH 와 PUT의 차이 (유효성 검사와 쓰임에 대해서) 개인적인 생각... (0) | 2024.02.06 |
|---|