@RequestBody 로 Enum 타입을 넘기는 경우가 종종 발생합니다.

이 때는 @RequestParam 때 Enum 파라미터에 바인딩하기 위해서 사용했던 Converter 가 동작하지 않습니다. JSON 으로 넘어오기 때문이죠.

하지만 더 간단한 해결책이 있습니다. 바로 @JsonCreator 입니다.

@JsonCreator

JsonCreator 어노테이션을 사용하여 json데이터로 enum 타입이 넘어왔을 때 string to enum converter 처리를 해줄 수 있습니다

클라이언트에서 임의의 String 값을 보내면 @JsonCreator 가 붙어있는 해당 함수를 통해서 객체를 생성하고 필드를 채워줍니다.

동작과정

Jackson이 deserialize 과정에서 별도의 설정이 없을 때 처리하는 동작은 다음과 같습니다.

  1. 기본 생성자를 이용해서 생성
  2. 필드가 public이면 직접 할당
  3. 필드가 private이면 setter 사용

위의 과정 중 @JsonCreator는 (기본 생성자) + (setter) 조합을 대체합니다.

이 어노테이션이 생성자나 팩토리 메서드 위에 선언되면 Jackson은 해당 함수를 통해 객체를 생성하고 필드를 생성과 동시에 채웁니다.