Spring | @NotNull, @NotEmpty, @NotBlank

yeonk·2023년 4월 27일
0

spring & spring boot

목록 보기
7/10
post-thumbnail

개요


우아한테크코스 레벨2 장바구니 미션에서 Bean Validation에서 제공하는 표준 Validation을 사용하였다. 그 중 빈 값을 검증하는 애너테이션 3가지와 그 차이점에 대해 정리해보려고 한다. 해당하는 애너테이션은 @NotNull, @NotEmpty, @NotBlank 이다.





@NotNull


기본적으로 @NotNull 애너테이션은 아래와 같이 검증을 원하는 필드값에 사용할 수 있다.
message는 선택사항이기 때문에 작성하지 않아도 된다.

public class UserNotNull {
    
    @NotNull(message = "이름은 null이 될 수 없습니다.")
    private String name;
    
    // constructors / getters / toString   
}
  • @NotNullNull을 허용하지 않는다.

  • """ " 의 입력은 허용한다.

  • 즉, 해당 필드는 Null이 아니어야 한다. 하지만 빈 값은 입력이 가능하다.





@NotEmpty


@NotEmpty 애너테이션 역시 아래와 같이 검증을 원하는 필드값에 사용할 수 있고 message 도 추가할 수 있다.

public class UserNotEmpty {
    
    @NotEmpty(message = "이름은 빈 값일 수 없습니다.")
    private String name;
    
    // constructors / getters / toString
}
  • @NotEmpty@NotNull과 같이 Null 을 허용하지 않고, 추가로 "" 도 허용하지 않는다.

  • 하지만 역시 " " 는 입력 가능하다.

  • 즉, @NotEmpty을 통과하려면Null이 아니어야 하며 크기/길이는 0보다 커야 한다.





@NotBlank


@NotBlank 애너테이션 역시 아래와 같이 검증을 원하는 필드값에 사용할 수 있고 message 도 추가할 수 있다.

public class UserNotBlank {

    @NotBlank(message = "이름은 공백이나 빈칸일 수 없습니다.")
    private String name;
    
    // constructors / getters / toString

}
  • @NotBlankNull, "", " " 모두 허용하지 않는다.

  • @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

Using @NotNull on a Method Parameter

0개의 댓글