새롭게 두근거리는 마음을 가지고 사이드 프로젝트에 들어갔습니다.
제게 주어진 첫 번째 역할은 이전 작업자분(졸업,,)이 담당하던 공지사항 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로 바꿨는데, 그 과정에서 문제가 발생한 줄 알았습니다.
다들 행복한 코딩하세요.