프로젝트에서 유효성 검사를 위해 사용했던 세 가지 애너테이션들에 대해 알아보려고 합니다!
자바에서 @NotNull
, @NotEmpty
, @NotBlank
는 모두 유효성 검증(validation)을 위해 사용되는 애너테이션입니다.
이 세가지가 비슷하지만 차이가 분명히 있기 때문에, 잘 알아야 용도에 알맞게 사용할 수 있습니다.
The annotated element must not be null. Accepts any type.
@NotNull
애너테이션은 말 그대로 null 값만 허용하지 않습니다.
매개변수, 필드 또는 메서드 반환 값이 Null인지 체크하는 데 사용되고,
NullPointerException이 발생하지 않도록 하는 데 사용됩니다.
따라서 "" / " "와 같은 빈문자열이 입력되었을 경우에는 허용하게 됩니다.
@NotNull String str1 = null; // false @NotNull String str2 = ""; // true @NotNull String str3 = " "; // true
The annotatd 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)
@NotEmpty
애너테이션은 문자열 / 컬렉션 / 맵 / 배열이 비어 있지 않아야 함을 나타낼 경우 사용됩니다.
객체에 적어도 하나 이상의 요소가 포함되어야 하므로 null과 ""를 허용하지 않습니다.
다만 " "의 입력은 허용됩니다.
@NotEmpty String str1 = null; // false @NotEmpty String str2 = ""; // false @NotEmpty String str3 = " "; // true
The annotated element must not be null and must contain at least one non-whitespace character. Accepts CharSequence.
@NotBlank
애너테이션은 세가지 애너테이션 중 가장 강도가 강한 것으로
null, "", " " 모두 허용하지 않습니다.
@NotBlank String str1 = null; // false @NotBlank String str2 = ""; // false @NotBlank String str3 = " "; // false
[참고 1] https://www.baeldung.com/java-bean-validation-not-null-empty-blank
[참고 2] https://javaee.github.io/javaee-spec/javadocs/javax/validation/constraints/package-summary.html