@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 타입을 검증할 때 어노테이션을 만들어서 추가하는 방법이 많습니다.
하지만 코드를 똑같이 따라해도 동작하지 않아서 이 방법으로 해결할 수 없었습니다.
추후에 방법을 찾게 된다면 추가하겠습니다.