728x90
Spring 에서 직렬화/역직렬화 시 기본적으로 사용되는 ObjectMapper 에서는 역직렬화시 Getter 가 필요하고 직렬화시 기본생성자가 필요하다. 그런데 직렬화시 기본생성자 외에 인자가 있는 생성자나 팩토리 메소드를 활용할 수도 있다.
@JsonCreator 어노테이션의 mode 속성은 한 개의 파라미터냐(DELEGATING), 여러 개의 파라미터냐(PROPERTIES)에 따라 선택하거나 자동으로 설정되도록 기본값(DEFAULT)으로 둘 수 있다. 일반적으로 기본값으로 두고 사용해도 무리는 없다.
인자가 있는 생성자를 활용하는 방법
주의할 점은 파라미터에 @JsonProperty 를 반드시 지정해야 한다.
class Test {
private String a;
private String b;
private String c;
@JsonCreator
public Test(
@JsonProperty("a") String a,
@JsonProperty("b") String b,
@JsonProperty("c") String c) {
this.a = a;
this.b = b;
this.c = c;
}
}
팩토리 메소드를 활용하는 방법
인자가 있는 생성자를 활용할 때와 비슷한데 중요한 점은 팩토리 메소드가 반드시 static 이어야 한다는 점이다.
class Test {
private String a;
private String b;
private String c;
private Test(String a, String b, String c) {
this.a = a;
this.b = b;
this.c = c;
}
@JsonCreator
public static Test test(
@JsonProperty("a") String a,
@JsonProperty("b") String b,
@JsonProperty("c") String c){
return new Test(a, b, c);
}
}
728x90
'Backend > Java' 카테고리의 다른 글
flatMap (0) | 2022.09.07 |
---|---|
JVM 실행 옵션 정리 (0) | 2022.01.10 |
AutoBoxing과 AutoUnBoxing (0) | 2021.08.25 |
@Async, CompletableFuture, parallelStream (0) | 2021.07.14 |
Collections.EMPTY_LIST, Collections.EMPTY_MAP (0) | 2021.07.12 |