Spring @Valid, @Validated Annotation
- study
- 2021. 4. 22. 09:49
어떤 어노테이션 들이 있을까
@NotNull
- 어노테이션이 붙은 프로퍼티가 Null이 아닌지 검증한다.
@NotEmpty
- 어노테이션이 붙은 프로퍼티가 Null 이거나 빈 값인지 검증한다.
- String, Collection, Map, Array에 적용 될 수 있다.
@NotBlank
- 어노테이션이 붙은 값이 Null 이거나 공백인지 체크한다.
- TextValue에만 적용 될 수 있다.
@AssertTrue
- 어노테이션이 붙은 프로퍼티가 True인지 검증한다.
@Size
- 어노테이션이 붙은 프로퍼티가 min과 max 속성 사이의 값을 가지는지 검증한다.
- String, Collection, Map, Array에 적용 될 수 있다.
@Size(min = 10, max = 100)
@Min
- 어노테이션이 붙은 프로퍼티가 가져야 할 최소값을 정의하고, 검증한다.
@Min(value = 10)
@Max
- 어노테이션이 붙은 프로퍼티가 가질 수 있는 최대값을 정의하고, 검증한다.
@Max(value = 100)
@Positive @PositiveOrZero
- 양수 검증
- Positive는 0을 포함하지 않는다.
- PostiviveOrZero는 0을 포함하는 시킨다.
@Negative @NegativeOrZero
- 음수 검증
- Negative는 0을 포함하지 않는다.
- NegativeOrZero는 0을 포함하는 시킨다.
- 어노테이션이 붙은 프로퍼티가 이메일 형식인지 검증한다.
@Past @PastOrPresent
- date 값을 검증한다.
- @Past date가 과거 인지 검증한다.
- @PastOrPresent date가 현재를 포함하는 과거인지 검증한다.
@Future @FutureOrPresent
- date값을 검증한다.
- @Future date가 미래인지 검증한다.
- @FutureOrPresnet date가 현재를 포함하는 미래인지 검증한다.
@Valid와 @Validated
@Valid
- 제약조건을 달아놓은 속성에 대해 전부 유효성 검사
@PostMapping("/owners/{ownerId}/pets/{petId}/edit")
public String processSubmit(@Valid @ModelAttribute("pet") Pet pet, BindingResult result) {
if (result.hasErrors()) {
return "petForm";
}
// ...
}
@PostMapping("/pet")
public ResponseEntity processSubmit(@RequestBody @Valid Pet pet, BindingResult bindingResult) {
//....
}
@Validated
- 속성 제약조건에 대한 그룹을 만들어 적용이 가능
- 원하는 속성만 유효성 검사를 하고 싶은 경우 사용
- 메소드 선언이 없는 마커 인터페이스 사용
public class Pet {
interface ValidateOwner {}
interface ValidateName {}
private int petId
private int ownerId;
@Size(min = 1, max = 10, groups = ValidateName.class)
private String petName;
@Size(min = 1, max = 10, groups = ValidateOwner.class)
private String OwnerName;
}
@PostMapping("/pet")
public ResponseEntity processSubmit(@RequestBody @Validated(Pet.ValidatePet.class) Pet pet,
BindingResult bindingResult) {
//....
}
'study' 카테고리의 다른 글
Spring DI (0) | 2021.04.30 |
---|---|
Spring 동작원리 (2) | 2021.04.30 |
Spring이란? (0) | 2021.04.20 |
Field Injection 왜 권장하지 않을까? (0) | 2021.04.19 |
[Spring]Request Mapping (2) | 2021.04.13 |