🖥️ 백엔드/스프링

[스프링] @NotNull, @NotEmpty, @NotBlank의 차이점

케로⸝⸝◜࿀◝ ⸝⸝ 2024. 5. 20. 10:09

개발하는 API 마다 request parameter의 null 체크를 해야하는 경우가 있다.

이때, Bean Validation에서 제공하는 표준 Validation인 @NotNull, @NotEmpty, @NotBlank를 사용하는데 이 세가지가 비슷하면서도 분명한 차이가 있어 헷갈리지 않도록 한 번 정리하려고 한다!

 

Jakarta Bean Validation - Home

Jakarta Bean Validation is a Java specification which lets you express constraints on object models via annotations lets you write custom constraints in an extensible way provides the APIs to validate objects and object graphs provides the APIs to validate

beanvalidation.org

 

@NotNull

https://beanvalidation.org/2.0/spec/#builtinconstraints-notnull

The annotated element must not be null.
Accepts any type.
  • @NotNull 애노테이션은 말 그대로 null만 허용하지 않음
  • 따라서, ""이나 " "은 허용
  • NullPointerException이 발생하지 않도록 하는데 사용

 

@NotEmpty

https://beanvalidation.org/2.0/spec/#builtinconstraints-notempty

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""를 허용하지 않음
  • " "은 허용

 

@NotBlank

https://beanvalidation.org/2.0/spec/#builtinconstraints-notblank

The annotated element must not be null and must contain at least one non-whitespace character.
Accepts CharSequence.
  • 세 가지 애노테이션 중 가장 강도가 강함!
  • null, "", " "을 모두 허용하지 않음

 

참고

CharSequence?

CharSequence는 클래스가 아니라 인터페이스이다.

인터페이스명(character + sequence)에서 짐작되듯이 char 값을 읽을 있는 시퀀스이다.

그리고 인터페이스는 다양한 종류의 char 시퀀스에 대해 균일한 읽기 전용 접근 권한을 제공한다

CharSequence implements 하여 구현된 대표적인 클래스로는 String, SpannableStringBuilder, StringBuilder, StringBuffer 등이 있다.

 

Enum 타입은 @NotBlank를 사용할 수 없다.

@NotBlank 는 CharSequence 타입만 적용 가능하다.

velog.io

 

CharSequence와 String의 차이 (feat. StringSpannableBuilder) - Dudmy's Devprint

String? String은 하나의 클래스이다. Java 프로그램의 모든 문자열 리터럴은 이 클래스의 인스턴스로 구현된다. 중요한 점은 문자열 값은 작성된 후에 변경할 수 없다는 것이다. String 객체에 보관하

dudmy.net

 

반응형