스프링에서 @ModelAttribute를 활용하여 Reqeust를 받게되면 손쉽게 JSON 형식 요청을 객체로 바꾸어 준다. 그런데 Request 클래스에 Enum 멤버변수가 있을 경우, 그리고 JSON 형식 요청에 Enum 멤버변수의 타입명이 있지만 그 값이 잘못되어 있는 경우 (예를 들어 ""라던가) Cannot coerce empty String 에러가 발생한다.
이때에는 Request 클래스에 @JsonCreator를 만들어주면 이상한 요청값이 들어오더라도 이를 null로 지정하는 등 대처할 수 있다.
@Value
public class requestDto {
Long id;
SomeEnumType someEnumType;
@JsonCreator
public requestDto(
@JsonProperty("id") String id,
@JsonProperty("SomeEnumType") String someEnumType) {
this.id = convertId(id);
this.someEnumType = convertEnumType(someEnumType);
}
private Long convertId(String id) {
return (StringUtils.isEmpty(id)) ? null : Long.valueOf(id);
}
private SomeEnumType convertEnumType(String someEnumType) {
return Arrays.stream(SomeEnumType.values())
.filter(type -> StringUtils.equalsIgnoreCase(type.name().toLowerCase(), someEnumType))
.findFirst().orElseGet(() -> null);
}
}