[Spring] 유효성 검사 @Valid

HEESEO·2024년 5월 17일

spring

목록 보기
5/5

@Valid 유효성 검사

유효성 검사?

데이터가 정해진 조건이나 규칙에 맞는지 확인하는 작업

ex) 데이터 형식, null 여부, 예상 범위 내에 있는 지 등...

@Valid로 유효성 검사하기

1. dependency 추가

// build.gradle

implementation 'org.springframework.boot:spring-boot-starter-validation'

=> 다시 build 필요!

2. @Valid annotation 추가

@PostMapping("/join/api/result") // After
    public ApiUtils.ApiResult<String> joinByApiResult(@Valid @RequestBody MemberDTO memberDTO) {

        log.info(memberDTO.toString());

        if(isDuplicateId(memberDTO))

            return error("아이디 중복", HttpStatus.CONFLICT);

        Member requestMember = memberDTO.converToEntity();
        String userId = memberService.join(requestMember);
        return success(userId);
    }

DTO 필드에 annotation 추가

종류

  • @NotBlank
  • @Email
  • @Pattern
  • @NotEmpty
  • @NotBlank
@Getter
@Setter
public class MemberDTO {
    @JsonProperty("user_id")
    @NotNull(message = "아이디는 필수로 입력되어야 합니다.")
    private String userId;
    @NotBlank(message = "비밀번호에 공백은 포함될 수 없습니다.")
    @Min(value = 8, message = "비밀번호는 8자리 이상이어야 합니다.")
    private String pw;
    @NotNull(message = "이름은 필수로 입력되어야 합니다.")
    private String name;
    @Email(message = "이메일 형식이 맞지 않습니다.")
    private String email;
    @Pattern(regexp = "^010-(\\d{4})-(\\d{4})$", message = "전화번호 형식이 맞지 않습니다.")
    private String contact;

    public Member converToEntity(){
        return new Member(userId, pw, name, email, contact);
    }
}

유효성 검사 실패 처리

유효성 검사에서 실패했다면, Errors 객체를 통해 유효성 검사 오류에 대한 정보를 전달한다

  • errors.getFiledErrors() : 유효성 검사에 실패한 필드 목록 가져오기
  • error.getField() : 유효성 검사에 실패한 필드명 가져오기
  • error.getDefaultMessage() : 유효성 검사에 실패한 필드에 정의된 메시지 가져오기
@PostMapping(value = "/join/api/result")
    public ApiResult joinByApiResult(@Valid @RequestBody UserDTO userDto, Errors errors) {

        if (errors.hasErrors()) {
            List<FieldError> list = errors.getFieldErrors();
            String message = "";
            for (FieldError error : list) {
                message += error.getDefaultMessage() + " ";
            }
            return error(message, HttpStatus.BAD_REQUEST);
        }
}

@Valid, @Validated

@Valid

  • JSR-303 자바표준스펙
  • MVC의 controller에서 entity를 검증할 때 사용

@Validated

  • Spring framework가 제공
  • @Valid와 유사하게 객체의 유효성을 검증
  • 검증 그룹을 지정할 수 있음

0개의 댓글