Spring @Valid, @Validated Annotation

 

어떤 어노테이션 들이 있을까

 

@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을 포함하는 시킨다.

 

@Email

  • 어노테이션이 붙은 프로퍼티가 이메일 형식인지 검증한다.

 

@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

댓글



Designed by JB FACTORY