Skip to content

Latest commit

 

History

History
31 lines (25 loc) · 2.11 KB

Spring Bean Validation.md

File metadata and controls

31 lines (25 loc) · 2.11 KB

Spring에서 Java Bean Validation - JSR 303, JSR 380을 기반으로 여러 확장된 기능을 제공한다.

  • @Valid와 @Validated 차이

    • @Valid
      • 상황에 따라 구체적인 구현체는 다르지만, ArgumentResolver 의 구현체가 Validation을 호출한다.
        • RequestResponseBodyMethodProcessor 또는 ModelAttributeMethodProcessor
        • 이로 인해 컨트롤러 계층에서만 동작한다.
        • DataBinder가 Validation을 수행한다.
      • MethodArgumentNotValidException 예외가 발생한다. - 명세에도 @Valid 실패 시 발생한다고 나온다.
      • DefaultHandlerExceptionResolver에 의해 에외가 Catch되고, 400 BadRequest가 발생한다.
    • @Validated
      • Spring 프레임워크에서 제공한다.
      • AOP 기반으로 동작하며, MethodValidationInterceptor가 클래스에 등록된다.
        • 이로 인해 계층에 무관하게 사용 가능하다.
        • 프록시 객체를 제공해 주는 것이므로 사용하려는 변수, 파라미터 등에 @Valid를 입력해야 한다.
      • MethodValidationAdapter가 Validation을 수행한다.
        • 이는 Spring의 MethodValidator 인터페이스의 구현체로, 기존 Bean Validation Spec의 Validator를 사용한다. (Adapter 패턴, 내부 구현으로는 SpringValidatorAdapter를 사용하는 것 같다.)
      • ConstraintViolationException 예외가 발생한다. 500이 발생한다.
      • Grouping 기능을 제공한다.

추천하는 자료

References