No validator could be found for constraint 'jakarta.validation.constraints.NotBlank'

김태훈·2023년 8월 30일
0
post-thumbnail

문제상황

새롭게 두근거리는 마음을 가지고 사이드 프로젝트에 들어갔습니다.
제게 주어진 첫 번째 역할은 이전 작업자분(졸업,,)이 담당하던 공지사항 API를 리팩토링하는 것이었습니다.

도중, 공지사항을 등록하는 메서드를 실행하자 다음과 같은 에러를 뱉어냈습니다.

2023-08-30T18:23:42.775+09:00 ERROR 50261 --- [nio-8080-exec-1] g.h.g.exception.GlobalExceptionHandler   : Exception: HV000030: No validator could be found for constraint 'jakarta.validation.constraints.NotBlank' validating type '...경로...NoticeCategory'. Check configuration for 'noticeCategory'

원인

공지사항을 Save 하기 위해 사용하는 DTO의 일부분을 가져왔습니다.

@NoArgsConstructor
@AllArgsConstructor
public class NoticeRequest {

	... 생략 ...

    @NotBlank(message = "카테고리를 설정해주세요")
    private NoticeCategory noticeCategory;
	
    ... 생략 ...
}
public enum NoticeCategory {
    약관("terms"),
    이벤트("event"),
    안내사항("notification");

    private String value;

    NoticeCategory(String value) {
        this.value = value;
    }

    public String getValue() {
        return value;
    }
}

필드값으로 noticeCategory 는 Enum값인데요.
Enum은 자바에서 static한 인스턴스로 만들어집니다. 그런데 @NotBlank 는 String이 비어있는지 검사하기 위한 어노테이션이라서 쓸 수 없어요.
해당 어노테이션을 @NotNull로 변경합니다.

이렇게 하면 문제가 해결된 걸 확인할 수 있습니다.

후기

간단한 문제인데 저는 약간 시간이 걸렸네요.
에러메세지에 validator가 있는데요. 제가 @ModelAttribute로 되어있는 걸 @RequestBody로 바꿨는데, 그 과정에서 문제가 발생한 줄 알았습니다.
다들 행복한 코딩하세요.

profile
작은 지식 모아모아

0개의 댓글