우아한테크코스 레벨2 장바구니 미션에서 Bean Validation에서 제공하는 표준 Validation을 사용하였다. 그 중 빈 값을 검증하는 애너테이션 3가지와 그 차이점에 대해 정리해보려고 한다. 해당하는 애너테이션은 @NotNull
, @NotEmpty
, @NotBlank
이다.
기본적으로 @NotNull
애너테이션은 아래와 같이 검증을 원하는 필드값에 사용할 수 있다.
message는 선택사항이기 때문에 작성하지 않아도 된다.
public class UserNotNull {
@NotNull(message = "이름은 null이 될 수 없습니다.")
private String name;
// constructors / getters / toString
}
@NotNull
은 Null
을 허용하지 않는다.
""
과 " "
의 입력은 허용한다.
즉, 해당 필드는 Null
이 아니어야 한다. 하지만 빈 값은 입력이 가능하다.
@NotEmpty
애너테이션 역시 아래와 같이 검증을 원하는 필드값에 사용할 수 있고 message 도 추가할 수 있다.
public class UserNotEmpty {
@NotEmpty(message = "이름은 빈 값일 수 없습니다.")
private String name;
// constructors / getters / toString
}
@NotEmpty
는 @NotNull
과 같이 Null
을 허용하지 않고, 추가로 ""
도 허용하지 않는다.
하지만 역시 " "
는 입력 가능하다.
즉, @NotEmpty
을 통과하려면Null
이 아니어야 하며 크기/길이는 0보다 커야 한다.
@NotBlank
애너테이션 역시 아래와 같이 검증을 원하는 필드값에 사용할 수 있고 message 도 추가할 수 있다.
public class UserNotBlank {
@NotBlank(message = "이름은 공백이나 빈칸일 수 없습니다.")
private String name;
// constructors / getters / toString
}
@NotBlank
은 Null
, ""
, " "
모두 허용하지 않는다.
@NotBlank
이 사용된 문자열 필드는 Null
이 아니어야 하며 공백을 제거한(trim) 길이가 0보다 커야 한다.
간단한 내용일 수 있지만 검증에 사용되기 때문에 3가지 애너테이션의 특징과 차이를 명확히 알고 사용해야할 것 같다.
@NotNull
제약된 필드 (CharSequence, Collection, Map 또는 Array)는 Null
이 아닌 한 유효하며 빈 값일 수 있다.
Null
허용하지 않음, ""
과 " "
허용
@NotEmpty
제약된 필드 (CharSequence, Collection, Map 또는 Array)는 Null
이 아니며 크기/길이가 0보다 크면 유효하다.
Null
과 ""
허용하지 않음, " "
허용
@NotBlank
Null
이 아니고 공백을 제거한 길이가 0보다 크면 유효하다.Null
, ""
, " "
모두 허용하지 않음Difference Between @NotNull, @NotEmpty, and @NotBlank Constraints in Bean Validation