Backend/Java
@JsonCreator
findmypiece
2021. 11. 19. 12:36
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