Search
〰️

Bean Validation

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. 라이브러리가 제공하는 기본 값 사용 → 공백일 수 없습니다.