HV000030: No validator could be found for constraint 'javax.validation.constraints.NotBlank' validating type 'java.lang.Integer'. Check configuration for 'itemStock'
Rest Api로 테스트 할 때는 발견하지 못했던 오류이다.
필수로 채워야하는 항목인 상품 가격과 상품 수량 필드를 @NotBlank로 처리해두었다. 완성된 UI화면에서 값이 없을 때 오류 메세지가 잘 출력되는지 테스트 하기 위해 빈칸으로 둔채 상품 등록 버튼을 눌렀더니 이 오류가 발생했다.
구글링을 해보니 @NotBlank를 Integer 타입에는 사용할 수 없어서 @NotNull을 사용해주었더니 문제가 해결되었다. 오류를 해결하면서 각 어노테이션의 차이점을 정리해보려고 한다.
@NotNull
- 문자 그대로 null인지 아닌지만 검증한다. 그래서 ""와 " "는 null이 아니기 때문에 validation에 걸리지 않는다.
- Integer, Long, CharSequence, Collection, Map, Array 를 검증할 수 있다.
@NotEmpty
- @NotEmpty는 size/length가 0보다 큰지를 검증한다 빈문자열인 ""은 length가 0이므로 허용하지 않고, 공백인 " "부터 허용한다.
- 그래서 @Size 어노테이션과 함께 사용하면 더 구체적으로 필드의 유효성검사를 실시할 수 있다.
- size/length를 검증해야 하기 때문에 Integer, Long 타입에 사용하면 오류가 발생한다. CharSequence, Collection, Map, Array를 검증할 수 있다.
@NotBlank
- @NotBlank는 length가 0보다 큰지를 검증하되 trim()함수를 통해 문자열의 공백을 모두 제거하고 검증을 한다. 따라서 공백만 있는 (" ") 문자열도 통과가 될 수 없다.
- 가장 엄격한 어노테이션이다. trim()함수가 사용되기 때문에 String 타입만 검증할 수 있다.