Bean Validation이란?
•
특정한 구현체가 아니라 Bean Validation 2.0(JSR-380)이라는 기술 표준이다.
◦
검증 애노테이션과 여러 인터페이스의 모음이다.
•
Bean Validation을 구현한 기술 중 일반적으로 사용하는 구현체는 Hibernate Validator이다.
◦
대표적으로 Hibernate Validation이 있다.
@Validated
•
스프링부트가 spring-boot-starter-validation 라이브러리를 넣으면 자동으로 Bean Validator를 인지하고 스프링에 통합한다.
•
스프링부트는 LocalValidatorFactoryBean을 자동으로 글로벌 Validator로 등록한다.
◦
이 Validator는 @NotNull과 같은 애노테이션을 보고 검증을 수행한다.
•
별도의 Validator를 선언해서 사용한다면 LocalValidator는 적용되지 않는다.
검증 순서
1.
@ModelAttribute → 각각의 필드에 타입 변환 시도
a.
성공하면 다음으로
b.
실패하면 typeMismatch로 FieldError 추가
2.
Validator 적용
•
바인딩에 성공한 필드만 Bean Validator 적용
•
타입 변환에 성공해서 바인딩에 성공한 필드여야 BeanValidation 적용이 의미있다.
◦
itemName에 문자 A 입력 → itemName 필드에 BeanValidation 적용
◦
price에 문자 A 입력 → “A”를 숫자타입 변환 시도 실패 → typeMismatch FieldError 추가 → price 필드는 BeanValidation 적용X
BeanValidation 메시지 찾는 순서
1. 생성된 메시지 코드 순서대로 messageSource 에서 메시지 찾기
2. 애노테이션의 message 속성 사용 → @NotBlank(message = "공백! {0}")
3. 라이브러리가 제공하는 기본 값 사용 → 공백일 수 없습니다.