코딩마을방범대

@Valid와 @Validated 본문

💡 백엔드/Java

@Valid와 @Validated

신짱구 5세 2023. 5. 31. 13:11
728x90

클라이언트 측에서 넘어온 데이터를 바인딩 할 때 유효성 검사를 위한 어노테이션

컨트롤러에서 사용 가능하며, 유효성 검사를 할 항목은 해당 객체에서 설정해주어야 함

 

 

유효성 검사를 위한 어노테이션 종류

Anotation 제약조건
@NotNull Null 불가력 가능
@Null Null 입력 가능
@NotEmpty Null, 빈 문자열 불가
@NotBlack Null, 빈 문자열, 스페이스만 있는 문자열 불가
@Size(min= , max= ) 문자열, 배열등의 크기가 만족하는지
@Pattern(regex= ) 정규식을 만족하는지
@Max(숫자) 지정 값 이하인지
@Min(숫자) 지정 값 이상인지
@Future 현재 보다 미래인지
@FutureOrPresent
현재와 동일하거나 미래인지
@Past 현재 보다 과거인지
@PastOrPresent
현재와 동일하거나 과거인지
@Positive 양수만 가능
@PositiveOrZero 양수와 0만 가능
@Negative 음수만 가능
@NegativeOrZero 음수와 0만 가능
@Email 이메일 형식만 가능
@Digits(integer= , fraction = ) 대상 수가 지정된 정수와 소수 자리 수보다 작은지
@DecimalMax(value= ) 지정된 값(실수) 이하인지
@DecimalMin(value= ) 지정된 값(실수) 이상인지
@AssertFalse false 인지
@AssertTrue true 인지

 

 

 

 

@Valid

  • 해당 객체의 유효성 검사를 진행함
  • 검사 진행 후 에러가 발생 시 SpringBoot가 생성한 Data 값으로 자동 reponse 됨

ex) 400 / Bad Request

 

검사 진행 후 유효성 검사 error 시 MethodArgumentNotValidException이 발생

이 Exception을 이용해 ExceptionHadnler 조작 시 response 값을 바꿀 수 있음

 

Exception Hadnler 사용법 참고

 

 

 

 

@Validated

  • @Valid 기능을 확장한 어노테이션
  • 특정 필드만 검사 하고 싶을 경우 필드를 그룹핑하여 진행 가능

 

사용 방법

1. Group 클래스에 그룹별 interface 생성

public class ValidationGroups {
    public interface groupA {};
    public interface groupB {};
}

 

2. 객체의 필드 별 그룹 적용

public class Article {
    private Long id;
    @NotEmpty(group = {ValidationGroups.groupA.class})
    private String title;
    @NotEmpty(group = {ValidationGroups.groupB.class})
    private String content;
    ...
}

 

3. 컨트롤러에서의 사용

@RestController
public class ArticleController {
    ...
    @PostMapping("/article/write")
    public ResponseEntity articleWrite(@RequestBody 
                                       @Validated(ValidationGroup.groupB.class) Article article) {
        ...
    }
}

 

 

 

 


 

참고사이트

@Valid 를 이용해 @RequestBody 객체 검증하기

[Spring] @Valid, @Validated 사용법

728x90