"Bean Validation is a standard validation specification that allows us to easily validate domain objects by using a set of constraints declared in the form of annotations."
Springboot에서 Controller layer로 들어오는 Domain의 유효성을 검사할때
Bean Validation을 사용하여 편리하게 유효성을 검사할 수 있습니다.
이를 위해선 단순히 Domain 객체의 Field에 유효성이 필요한 어노테이션을 선언합니다.
그러나 각 어노테이션들의 기능을 이해하지 못하면 정확한 유효성 검사를 할 수 없습니다.
제가 겪은 어노테이션 헷갈렸던 어노테이션들은 @NotNull, @NotEmpty, @NotBlank입니다.
@NotNull, @NotEmpty, @NotBlank 셋의 차이는?
@NotNull
@NotNull은 뜻 그대로, 필드의 값이 Null이 들어오는 것을 허용하지 않습니다.
단, "" 과 같은 빈 문자열 또는 [] 같은 빈 배열 등을 허용합니다.
Null이 들어올 경우 ConstraintViolation Exception을 발생시킵니다.
또한 Null이 들어올 수 있는 어떤 타입에 사용될 수 있습니다.
@NotEmpty
@NotBlank는 @NotNull을 포함하여, 객체의 size 또는 length가 0일 경우에 ConstraintViolation Exception을 발생시킵니다.
@NotEmpty는 CharSequence, Collection, Map, or Array 타입을 지원합니다.
@NotBlank
@NotBlank는 NotBlankValidator.class를 사용하며, character sequence's trimmed length가 0일 경우 ConstraintViolation Exception을 발생시킵니다.
즉 @NotEmpty의 경우 " "와 같은 whitespace character가 올 수 있지만, @NotBlank는 이를 허용하지 않습니다.
@NotEmpty는 String, CharSequence 타입을 지원합니다.
잠깐, CharSequence랑 String은 무슨 차이인데?
CharSequence는 String과 달리 가변(mutable)적인 특성을 가집니다. 즉, StringBuilder나 StringBuffer와 같은 클래스는 문자열을 변경할 수 있습니다.
String은 Java에서 가장 많이 사용되는 클래스 중 하나이며, 문자열을 나타내는 데 사용됩니다. String은 불변(immutable) 클래스이기 때문에 한 번 생성되면 내용을 변경할 수 없습니다.
참고 자료
https://www.baeldung.com/java-bean-validation-not-null-empty-blank
https://dudmy.net/android/2017/09/15/difference-char-string/
'Development > Spring' 카테고리의 다른 글
[Spring] 스프링 부트의 동작 방식 (0) | 2024.01.15 |
---|---|
[Spring] 스프링 부트란? (0) | 2024.01.15 |
[Spring] JSP/Servlet부터 Spring, 그리고 Springboot 까지 (0) | 2024.01.07 |
[Spring] Spring JPA에서 null을 리턴 하지 않는 경우와 Optional 타입에 대하여 (1) | 2023.11.14 |
[Spring]Github Actions로 Springboot CI 구현하기, postgres 설정 (0) | 2023.05.01 |