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

'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