@valid와 @Validated

이은수·2023년 4월 5일

@Valid

  • @Valid는 빈 검증기(Bean Validator)를 이용해 객체의 제약 조건을 검증하도록 지시하는 어노테이션
  • @Valid는 기본적으로 컨트롤러에서만 동작하고,. 다른 계층에서 파라미터를 검증하기 위해서는 @Validated와 결합해야 한다.

@Validated

  • @Validated는 AOP 기반으로 메소드의 요청을 가로채서 유효성 검증을 진행해준다.
  • @Validated를 클래스 레벨에 선언하면 해당 클래스에 유효성 검증을 위한 AOP의 어드바이스 또는 인터셉터(MethodValidationInterceptor)가 등록된다.
  • @Validated를 사용하면 컨트롤러, 서비스, 레포지토리 등 계층에 무관하게 스프링 빈이라면 유효성 검증을 진행할 수 있다.
  • 제약 조건이 적용될 검증 그룹을 지정할 수 있는 기능이 있다.

다양한 제약조건 어노테이션

Anotation제약조건
@NotNull해당 값이 null이 아닌지 검증함
@NullNull만 입력 가능
@NotEmpty해당 값이 null이 아니고, 빈 스트링("") 아닌지 검증함(" "은 허용됨)
@NotBlank해당 값이 null이 아니고, 공백(""과 " " 모두 포함)이 아닌지 검증함
@Size(min=,max=)해당 값이 주어진 값 사이에 해당하는지 검증함(String, Collection, Map, Array에도 적용 가능)
@AssertTrue)해당 값이 true인지 검증함
@Min해당 값이 주어진 값보다 작지 않은지 검증함
@Max해당 값이 주어진 값보다 크지 않은지 검증함
@Pattern해당 값이 주어진 패턴과 일치하는지 검증함

@Valid와 @Validated 유효성 검증 차이

  • @Valid
    • JSR-303 자바 표준 스펙
    • 특정 ArgumentResolver를 통해 진행되어 컨트롤러 메소드의 유효성 검증만 가능하다.
    • 유효성 검증에 실패할 경우 MethodArgumentNotValidException이 발생한다.
  • @Validated
    • 자바 표준 스펙이 아닌 스프링 프레임워크가 제공하는 기능
    • AOP를 기반으로 스프링 빈의 유효성 검증을 위해 사용되며 클래스에는 @Validated를, 메소드에는 @Valid를 붙여주어야 한다.
    • 유효성 검증에 실패할 경우 ConstraintViolationException이 발생한다.

0개의 댓글