Spring Boot에서 RESTful API를 개발할 때 자주 사용되는 enum 타입을 JSON 데이터로 전송하거나 받아야 하는 경우가 있습니다. 이를 위해 Jackson 라이브러리에서는 @JsonCreator
어노테이션을 활용하여 enum의 문자열 값을 해당 enum 상수로 변환할 수 있습니다.
@JsonCreator
는 Jackson 라이브러리에서 JSON 데이터를 역직렬화할 때 사용되는 어노테이션입니다. 이 어노테이션이 지정된 메서드는 JSON 데이터에서 가져온 값을 객체로 변환할 때 사용됩니다. 주로 생성자 또는 정적 팩토리 메서드에 적용됩니다.
보통 enum의 값을 JSON 데이터로 전송할 때는 해당 enum 상수의 이름을 문자열로 전송합니다. 그러나 Spring Boot에서는 숫자로 표현된 enum 값을 JSON으로 받는 경우가 종종 있습니다. 이 경우를 위해 @JsonCreator
를 활용하여 enum의 name 값으로 enum을 입력 받도록 구현할 수 있습니다.
아래는 예시 코드입니다.
public enum ProgressStage {
START("start"),
IN_PROGRESS("in_progress"),
COMPLETE("complete");
private final String name;
ProgressStage(String name) {
this.name = name;
}
@JsonCreator
public static ProgressStage of(String progress) {
return Arrays.stream(ProgressStage.values())
.filter(i -> i.name.equals(progress))
.findAny()
.orElse(null);
}
}
위 코드에서 of
메서드는 @JsonCreator
어노테이션이 지정되어 있습니다. 이 메서드는 JSON 데이터에서 가져온 문자열 값을 해당 enum 상수로 변환합니다.
Spring Boot 애플리케이션에서 RESTful API 엔드포인트를 통해 JSON 데이터를 수신하는 경우, Jackson은 자동으로 해당 enum 상수로 변환해줍니다. 또한, 이 메서드는 enum 상수를 문자열로 직렬화할 때도 사용될 수 있습니다.
{
"progress": "start"
}
위와 같은 JSON 데이터가 있다면, Jackson은 자동으로 해당 enum 상수인 ProgressStage.START
로 변환하여 처리할 것입니다.
이와 같이 @JsonCreator
를 활용하여 enum의 문자열 값을 enum 상수로 변환할 수 있으므로, Spring Boot 애플리케이션에서 JSON 데이터를 다룰 때 편리하게 활용할 수 있습니다.