@JsonCreator 자세히

@JsonCreator 를 사용해서 null 로 변환

@Getter
@RequiredArgsConstructor
public enum TodoStatus {

    TODO("할 일"),
    IN_PROGRESS("진행중"),
    DONE("완료"),
    PENDING("대기");

    private final String description;

    @JsonCreator
    public static TodoStatus parsing(String inputValue) {
        return Stream.of(TodoStatus.values())
                .filter(category -> category.toString().equals(inputValue.toUpperCase()))
                .findFirst()
                .orElse(null);
    }

}

JSON으로 넘어오는 String 값은 @JsonCreator 어노테이션을 통해서 변환할 수 있습니다.

그래서 상수에 맞지 않는다면 null 을 반환시키도록 합니다.

@Getter
@NoArgsConstructor
public class TodoAddRequest {

    @NotNull(message = "유효하지 않은 status입니다.")
    private TodoStatus status;

}

null을 반환시켰으니 Bean Validation 의 @NotNull 에 걸리게됩니다. 그래서 BindException 이 발생하게 됩니다.

[참고] 어노테이션으로 validation을 체크


검색을 해보면 Enum 타입을 검증할 때 어노테이션을 만들어서 추가하는 방법이 많습니다.

하지만 코드를 똑같이 따라해도 동작하지 않아서 이 방법으로 해결할 수 없었습니다.

추후에 방법을 찾게 된다면 추가하겠습니다.

Reference