스프링 @ModelAttribute에서 Enum 값을 받을 때 Cannot coerce empty String 에러가 발생하는 경우

하루에 한걸음·2022년 3월 8일
0

스프링에서 @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);
    }

}
profile
백엔드 공부를 위한 블로그입니다.

0개의 댓글