[Spring_4기 본캠프] Spring 숙련 - 1주차 - Validation | Day 41
◆ Bean Validation
- Bean Validation 검증기는 선언된 제약 조건에 따라 해당 클래스의 인스턴스를 검증한다.
- 예제 코드 ↓
public class PersonForm {
@NotNull
@Size(max=64)
private String name;
@Min(0)
private int age;
}
◆ Validator
- Spring Boot는 validation 라이브러리를 설정하면 자동으로 Bean Validator를 Spring에 통합되도록 설정해준다.
- Global Validator가 Defualt로 적용되어 있어 @Valid, @Validated 애너테이션을 달아 사용해주면 된다.
- Bean Validation Annotation 종류 예시
1) @NotBlank -> 가장 많은 제약을 갖고있음
- null 을 허용하지 않는다.
- 공백(" ")을 허용하지 않는다. (하나 이상의 문자를 포함해야 한다.)
- 빈칸("")을 허용하지 않는다.
- CharSequence 타입 허용
2) @NotNull
- null을 허용하지 않는다.
- 모든 타입을 허용한다.
3) @NotEmpty
- null을 허용하지 않는다.
- 빈칸("")을 허용하지 않는다.
- CharSequence, Collection, Map, Array 허용
◆ @Valid 와 @Validated의 차이점
- @Valid : 자바 표준 검증 (Hibernate Validator)
- @Validated : 스프링 전용 검증
- @Validated를 통해 Group Validation 혹은 Controller 이외 계층에서 Validation 사용이 가능하다. (잘 사용하지는 않는다.)
- @Valid는 MethodArgumentException 예외를 발생시킨다.
- @Validated는 ConstrainViolationException 예외를 발생시킨다. ( = 서로 발생시키는 예외가 다르다.)
Q. Hibernate Validator와 Bean Validation의 관계는 무엇인가?
A. Bean Validation은 인터페이스이고 Hibernate Validator가 구현체이다. 둘이 구분지어 사용한다기 보다는 인터페이스와 구현체의 관계구나 라는 것만 알고 validation을 자유롭게 사용하면 된다.
[참고]
https://hibernate.org/validator/ → 하이버네이트 validator 공식 문서
https://docs.spring.io/spring-framework/reference/core/validation/beanvalidation.html → 스프링 자바 bean validation 공식 문서