스프링으로 클라이언트에서 넘어온 데이터를 다루게 되면 특정 조건에 맞는지 검증해야 되는 경우가 많이 생긴다. 이때 사용하는 어노테이션이 @Valid 와 @Validation 두 가지인데, JSR 표준인 @Valid의 종류와 사용법에 대해 정리해 봤다.
해당 어노테이션을 사용하기 위해서 아래 디펜던시를 삽입해주면 된다.
implementation 'org.springframework.boot:spring-boot-starter-validation'
사용예시)
Controller
@RestController
@RequiredArgsConstructor
@RequestMapping("/user")
public class UserController {
@PostMapping("/create")
@ApiOperation(value = "회원 등록")
public ResponseEntity<Void> createUser(@Valid @RequestBody SaveRequest requestDto) {
userService.save(requestDto);
return CREATED;
}
}
DTO
public static class SaveRequest {
@NotBlank(message = "이메일 주소를 입력해주세요")
@Email(message = "이메일 형식에 맞춰 입력해주세요")
private String email;
@NotBlank(message = "비밀번호를 입력해주세요")
@Size(min = 8, max = 20, message = "비밀번호는 8자 이상 20자 이하로 입력해주세요")
@Pattern(regexp = PASSWORD, message = "숫자, 문자, 특수문자 중 2가지를 조합해 입력해주세요")
private String password;
@NotBlank(message = "닉네임을 입력해주세요")
@Size(min = 3, max = 12, message = "닉네임은 3자 이상 12자 이하로 입력해주세요")
private String nickname;
@NotBlank(message = "이름을 입력해주세요")
@Size(min = 2, message = "2자 이상 올바른 이름을 입력해주세요")
private String name;
@NotBlank(message = "휴대폰 번호를 입력해주세요")
@Pattern(regexp = PHONE, message = "올바른 휴대폰번호를 입력해주세요")
private String phone;
}
종류
| 어노테이션 | 설명 | 가능한 자료형 |
|---|---|---|
| @NotNull | null 비허용 | 모든 자료형 |
| @Null | null만 허용 | 모든 자료형 |
| @NotEmpty | null, "" 비허용 | CharSequence, Collection, Map, Array |
| @NotBlank | null, "", " "비허용 | CharSequence |
| @Size(min=, max=) | min이상 max이하 문자열 허용 | CharSequence, Collection, Map, Array |
| @Pattern(regex=, flag=) | 정규식 검증 | CharSequence |
| @Max(숫자) | 숫자 이하 값 허용 | BigDecimal, BigInteger, byte, short, int, long, 정수 자료형 wrapper |
| @Min(숫자) | 숫자 이상 값 허용 | BigDecimal, BigInteger, byte, short, int, long, 정수 자료형 wrapper |
| @Future | 현재시간보다 미래 허용 | Date, Calendar |
| @Past | 현재시간보다 과거 허용 | Date, Calendar |
| @Positive | 양수만 허용 | BigDecimal, BigInteger, CharSequence, byte, short, int, long, float, double, 숫자 자료형 wrapper |
| @PositiveOrZero | 0 + @Positive | BigDecimal, BigInteger, CharSequence, byte, short, int, long, float, double, 숫자 자료형 wrapper |
| @Negative | 음수만 허용 | BigDecimal, BigInteger, CharSequence, byte, short, int, long, float, double, 숫자 자료형 wrapper |
| @NegativeOrZero | 0 + @Negative | BigDecimal, BigInteger, CharSequence, byte, short, int, long, float, double, 숫자 자료형 wrapper |
| 이메일 형식만 허용 | CharSequence | |
| @Digits(integer=, fraction=) | 정수 자리수가 integer값 이하이고 소수 자리수가 fraction값 이하 | BigDecimal, BigInteger, CharSequence, byte, short, int, long, 정수 자료형 wrapper |
| @DecimalMax(value=) | value(실수) 이하 허용 | BigDecimal, BigInteger, CharSequence, byte, short, int, long, 정수 자료형 wrapper |
| @DecimalMin(value=) | value(실수) 이상 허용 | BigDecimal, BigInteger, CharSequence, byte, short, int, long, 정수 자료형 wrapper |
| @AssertTrue | true만 허용 | boolean, Boolean |
| @AssertFalse | false만 허용 | boolean, Boolean |