添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
瘦瘦的洋葱  ·  瞭解 GPON 科技 - Cisco·  1 周前    · 
聪明伶俐的芒果  ·  FM, FTRL, Softmax | ...·  6 月前    · 
Programming/Java

[JAVA] HV000030: No validator could be found for constraint 'javax.validation.constraints.NotEmpty' validating type 'java.lang.Long'.

2023. 2. 9. 14:42

간단한 API 테스트 중 에러 발생. 에러 메세지는 아래와 같다.

ERROR [DirectJDKLog.java - log] - Servlet.service() for servlet 
[dispatcherServlet] in context with path [] threw exception [Request processing failed;
nested exception is javax.validation.UnexpectedTypeException: 
HV000030: No validator could be found for constraint 'javax.validation.constraints.NotEmpty' validating type 'java.lang.Long'. Check configuration for 'userid'] with root cause

DTO를 생성 할 때 요청받을 파라미터 값 중 null 값 유효성 체크를 하기위해 'javax.validation.consstraints' 패키지 에 있는 어노테이션을 사용하는데, 필드 중 하나에 잘 못된 어노테이션을 붙여서 에러가 발생했다.

에러 메세지를 읽어보면 'java.lang.Long' 타입에는 NotEmpty 어노테이션을 붙일 수 없으니 필드 'userid'를 확인해보라고 한다.

이 문제를 수정하기 위해선 각 어노테이션을 알아 볼 필요가 있다.

@NotNull

  • Null인지 아닌지를 검증한다. null을 전달 받을 경우 Exception이 발생하지만 ""나 "   "와 같은 빈값이 들어올때는 null이 아닌 String으로 인식하기 때문에 유효성을 통과하게 된다. ""이나 공백 값이 들어올 경우 통과 되지만 Null이 들어올 경우 예외를 발생시켜야 할 때 사용한다.
  • Integer, Long, CharSequence, Collection, Map, Array 타입에 사용가능하다.
  • @NotEmpty

  • 빈 값을 체크한다. 요청 값으로 Null과 ""를 전달 받으면 Exception이 발생한다. 다만 "   " 공백으로 된 String 값은 유효성이 통과된다. @NotEmpty는 각 타입의 길이나 size가 0인지 아닌지를 기준으로 빈값을 판별하게 되는데, "   " 는 length가 0 이상이어서 validation에 걸리지 않는다.
  • CharSequence, Collection, Map, Array 타입에 사용가능하다.
  • @NotBlank

  • Null과 "", "   " 모두 허용하지 않는다. 3개의 어노테이션 중 가장 validation 강도가 높다고 할 수 있다. 문자열의 공백을 제거하고 길이 값을 체크하기 때문에 Null, "", "   "  요청 값이 들어올 경우 모두 validation에 걸린다.
  • String 타입만 사용 가능하다.
  • @Getter
    Public Class User {
        @NotNull
    	private long userid
    

    위 DTO 클래스에서 long 타입의 필드에 달려있던 @NotEmpty 어노테이션을 @NotNull로 수정하니 잘 된다. 

    [JAVA] Invalid character found in method name. HTTP method names must be tokens (0) 2024.03.08 [JAVA] Byte[]를 String으로 변환 / String을 Byte[]로 변환 (0) 2023.11.28 [JAVA] IllegalArgumentException : Class 'xxx' declares multiple JSON fields named 'xxx' (0) 2023.02.09 [JAVA] Gson으로 LocalDateTime 데이터를 format하여 Object, Array로 변형하기 (0) 2023.02.08