WEB/Spring

valid와 validation

hwahaha 2024. 5. 22. 01:39

@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