valid와 validation
@Valid
JSR-303 표준 스펙으로 Bean Validatior(빈 검증기)를 이용해 객체의 제약조건을 검증하도록 지시하는 어노테이션
기본적으로 컨트롤러에서만 동작
LocalValidatorFactoryBean
//validation
implementation 'org.springframework.boot:spring-boot-starter-validation'
spring에서는 LocalValidatorFactoryBean가 제약 조건 검증을 처리함
위의 validation 의존성을 추가하면 해당 기능들이 자동 설정됨
ArgumentResolver
스프링에선 ArgumentResolver가 클라이언트가 보낸 요청 데이터를 적절한 형식으로 변환하여 컨트롤러 메서드의 매개변수에 주입해줌
@RequestBody는 RequestResponseBodyMethodProcessor(ArgumentResolver의 구현체, Json 메세지를 객체로 변환해줌)가 @Valid로 유효성 검사 진행
@ModelAttribute는 ModelAttributeMethodProcessor가 유효성 검사 진행
MethodArgumentNotValidException
@Valid의 검증 오류로 MethodArgumentNotValidException이 발생
@Validated
검증은 컨트롤러에서 최대한 처리하는 것이 좋지만 불가피한 상황이 올 수 있음
@validated는 AOP 기반으로 메소드의 요청을 가로채서 유효성 검증함
Spring 프레임워크에서 제공하는 기능
클래스에 @Validated 선언
파라미터에 @Vaild 선언해야함
ConstraintViolationException
@vaildated의 검증오류로 ConstraintViolationException 발생
@Validated 선언시 클래스에 유효성 검증을 위한 AOP 어드바이스 또는 인터셉터가 등록되고
스프링 빈이라면 유효성 검증을 진행
참고 블로그
https://mangkyu.tistory.com/174