java.validation의 @Valid 어노테이션 사용법 정리 글입니다.

Spring Boot 라이브러리에서 기본적으로 탑재된 기능이며 따로 dependency해 줄 필요가 없습니다.

Spring Boot Version은 2.2.2.RELEASE 입니다.


1. java.validation 어노테이션 설명

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

2. Member.java

import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

public class Member {

    @NotNull(message = "id는 필수 값입니다.")
    @Size(min = 5, max = 10)
    private String id;

    @Max(value = 25, message = "25세 이하만 가능합니다.")
    @Min(value = 18, message = "18살 이상만 가능합니다.")
    private int age;

    @Pattern(regexp = "[a-zA-z0-9]+@[a-zA-z]+[.]+[a-zA-z.]+")
    private String email;
    
    ..setter/getter 생략..
}

3. TestController.java

import javax.validation.Valid;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping(value = "/member")
public class TestController {
    
    @PostMapping
    @ResponseBody
    public ResponseEntity saveMember(@Valid Member member, BindingResult bindingResult) {
        
        if (bindingResult.hasErrors()) {
            return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(bindingResult.getAllErrors());
        }
        
        /*
        	save Memeber
        */
        
        return ResponseEntity.ok(member);
    }
}
  • [post] /member요청 시, member를 저장하는 코드입니다.
  • @Valid 어노테이션을 통해 Member가 유효한 객체인지 검사합니다.
  • Member 객체가 유효하지 않으면 bindingResult.hasErrors() 메소드에서 true 값이 반환됩니다.
  • Member가 유효하지 않다면, ResponseEntity에 BAD_REQUEST와 bindingResult.getAllErrors() 값을 넣고 생성하여 반환합니다.

4. 테스트

POST http://localhost:8080/{contextPath}/member?id=ki&age=17&email=bamdule@navercom

Reponse 400 Bad Request

+ Recent posts