본문 바로가기

java

@NotEmpty @NotNull @NotBlank

부끄럽지만 Validation anotation 을 사용하면서 아래와 같이
NotNull은 null만 체크하고 NotEmpty는 ""만 체크하는 줄 알고 아무 생각없이 사용했습니다.

    @NotEmpty @NotNull 
    @JsonProperty("phoneNumber") 
    private String phoneNumber; 

    @NotEmpty @NotNull 
    @JsonProperty("privateYn") 
    private String privateYn; 


처음에는 이렇게 해도 잘 검증이 되어 사용하다가 privateYn 변수의 타입을 boolean으로 바꿀일이 있었습니다.

    @NotEmpty @NotNull 
    @JsonProperty("phoneNumber") 
    private String phoneNumber; 

    @NotEmpty @NotNull 
    @JsonProperty("privateYn") 
    private boolean privateYn; 


컴파일 시 HV000030 : No validator could be found for constraint
Validation error: “No validator could be found for type: java.lang.Boolean

에러가 발생했고 찾아 보니 @NotEmpty는 String과 collection 타입에만 적용되기 때문에 boolean은 안된다는 것을 알게 되었습니다ㅠ

또한 굳이 @NotEmpty와 @NotNull을 함께 쓰지 않아도 되는 걸 알게 됐습니다.

javax.validation.constraints



@NotNull
The annotated element must not be null. Accepts any type.
모든 데이터 타입에 대해 null을 허용하지 않습니다.
출처:https://javaee.github.io/javaee-spec/javadocs/javax/validation/constraints/NotNull.html



@NotEmpty
The annotated element must not be null nor empty. Supported types are:
CharSequence (length of character sequence is evaluated)
Collection (collection size is evaluated)
Map (map size is evaluated)
Array (array length is evaluated)

null과 ""를 허용하지 않습니다. 
출처:https://javaee.github.io/javaee-spec/javadocs/javax/validation/constraints/NotEmpty.html



@NotBlank
The annotated element must not be null and must contain at least one non-whitespace character. Accepts CharSequence.
null과 ""와 " "(빈공백문자열)를 허용하지 않습니다.
출처:https://javaee.github.io/javaee-spec/javadocs/javax/validation/constraints/NotEmpty.html


최종수정

    @NotEmpty 
    @JsonProperty("phoneNumber") 
    private String phoneNumber; 

    @NotNull 
    @JsonProperty("privateYn") 
    private boolean privateYn; 

++) 

위 변수에 추가로 사용해보면 좋을 것 같은 validation anotation입니다.

 

@AssertTrue          
@AssertFalse
true인지 false인지 검사. null은 체크하지 않음 

@Pattern 

값이 정규표현식에 일치하는지 검사. null은 체크하지 않음