Spring Validation

malslapq·2022년 6월 30일
0

spring

목록 보기
1/1
post-thumbnail

Validation (유효성 검증)

  • API를 개발할 경우 들어오는 값들에 대해서 기본적으로 검증해야 하는데 이는 두 가지로 나눌 수 있다.
    • 데이터 검증
      • 필수 데이터 유무
      • 데이터 허용 값의 범위(길이)
      • email, 신용카드, 핸드폰 번호 등 특정 형식에 맞춘 데이터
    • 비즈니스 검증
      • 서비스 정책에 따른 데이터 검증
      • 쿠팡에서 고객이 구매한 상품을 취소할 때 해당 품목이 정상적으로 결제됐는지 확인하는 등의 경우
      • 경우에 따라 외부 API를 호출하거나 DB의 데이터를 조회하여 검증하는 경우도 있음

Spring Validation

Java Bean Validation

  • Java Bean 기반으로 개별 데이터 검증
  • 어노테이션을 이용해 검증방법을 명시하고 검증
  • 주로 어노테이션을 명시 후 @RequestBody로 Contorller에서 받게 될 경우 받을 때 Validation을 하는 방법을 선택함
public class TestDTO() {
    @NotBlank(message="아이디를 입력해주세요.")
    private Long id;
    @NotBlank(message="이름을 입력해주세요.")
    @Size(min=1, max=10, message="이름은 1~10자 사이여야 합니다.")
    private String name;
    @Min(0, "나이는 1보다 작을 수 없습니다.")
    private int age;
    @Email("이메일 형식이 알맞지 않습니다.")
    private String email;
}
  • Spring validator 인터페이스를 구현하는 방법
    • supports 해당 validator이 동작할 조건을 정의하고 주로 같은 class인지 비교해서 확인한다.
    • validate 개발자가 원하는 검증을 진행
public class TestValidator implements Validator {
    public boolean supports(Class clazz) {
        return TestDTO.class.equals(clazz);
    }

    public void validate(Object obj, Errors errors) {
        ValidationUtils.rejectIfEmpty(e, "id", "id.empty");
        TestDTO testDTO = (TestDTO) obj;
        if (testDTO.getAge() < 0) {
            e.rejectValue("age", "negativevalue");
        }
    }
}

주로 사용하는 Validation 어노테이션

@AssertFalse 해당 필드가 거짓인지 검증

@AssertTrue 해당 필드가 참인지 검증

@Email(message = "5 - 20 사이에 글자") 해당 필드 문자열은 이메일 형식인지 검증

@Future 해당 필드가 미래의 날짜, 또는 시간인지 검증

@Past 해당 필드가 과거의 순간, 날짜 또는 시간인지 검증

@Max(value=) 해당 필드가 value보다 작거나 같은지 검증

@Min(value=) 해당 필드가 value보다 크거나 같은지 검증

@NotBlank 해당 필드가 null이 아니고 하나 이상의 공백이 아닌 문자를 포함하는지 검증

@NotEmpty 해당 필드가 null이거나 비어있는지 검증

@NotNull 해당 필드가 null이 아닌지만 검증

@Pattern(regexp=, message = "5 - 20 사이에 글자") 해당 필드 문자열이 regexp에 지정된 정규식과 일치하는지 검증

@Size(min=, max=, message = "5 - 20 사이에 글자") 해당 필드의 크기가 해당 범위 내에 있는지 검증

더 많은 정보를 알고 싶다면 링크된 공식문서를 읽어보도록 하자!
공식문서

profile
오히려 좋아, 자 가보자고!

0개의 댓글