Spring에서 메소드 레벨 유효성 검증을 위해
JSR-303의 @Valid
애노테이션을 사용한다.
또한 유효성 검사를 위해 멤버 속성을 표시하는 데에도 사용한다.
import javax.validation.Valid;
로 불러와야 사용할 수 있는 애노테이션이다.build.gradle
파일 -> dependencies
항목 -> org.springframework.boot:spring-boot-starter-validation
이 추가되어 있어 야 한다.Annotaion | 제약조건 |
---|---|
@NotNull | Null 불가 |
@Null | Null만 입력 가능 |
@NotEmpty | Null, 빈 문자열 불가 |
@NotBlank | Null, 빈 문자열, 스페이스만 있는 문자열 불가 |
@Size(min=,max=) | 문자열, 배열등의 크기가 만족하는가? |
@Pattern(regexp =) | 정규식을 만족하는가? |
@Max(숫자) | 지정 값 이하인가? |
@Min(숫자) | 지정 값 이상인가 |
@Future | 현재 보다 미래인가? |
@Past | 현재 보다 과거인가? |
@Positive | 양수만 가능 |
@PositiveOrZero | 양수와 0만 가능 |
@Negative | 음수만 가능 |
@NegativeOrZero | 음수와 0만 가능 |
이메일 형식만 가능 | |
@Digits(integer=, fraction = ) | 대상 수가 지정된 정수와 소수 자리 수 보다 작은가? |
@DecimalMax(value=) | 지정된 값(실수) 이하인가? |
@DecimalMin(value=) | 지정된 값(실수) 이상인가? |
@AssertFalse | false 인가? |
@AssertTrue | true 인가? |
컨트롤러에서 GET, POST, PATCH, PUT,PATCH 등 HTTP 메소드로 받을 값중에,
POST, PATCH, PUT은 http요청값에 Body
를 받는다.
여기서 Body
는 보통 JSON값으로 들어오는데, 변수가 1~2개일 경우에는 @RequestParam
으로 받아도되지만, 몇십개, 몇백개가 되어 버릴 수 있어서, 별도의 Class타입으로 처리를 한다.
- 이것을 DTO파일이라고 하는데, @RequsetBoby을 앞에붙여 주면된다.
public ResponseEntity postCoffee(@Valid @RequestBody CoffeePostDto coffeePostDto){ ...
@Valid
애노테이션으로 같이 써주면된다.@Valid 종류
중에 적합한 것을 붙여주면된다.public class CoffeePostDto {
@NotBlank
@Pattern(regexp = "^[a-zA-Z]+\\s?[a-zA-Z]+$")
private String engName;
@NotBlank
private String korName;
@NotPrice
private int price;
...
@NotNull의 경우 해당 값의 타입이 객체든, Enum이든 타입에 상관없이 적용 가능하지만, @NotBlank의 경우 객체와 Eum같이 별도의 특정값을 넣어야되는 상황에는 적용이 안된다.