SpringBoot 는 hibernate validator 검 사 를 사용 합 니 다.

본 고 는 vaidator 를 어떻게 사용 하여 데이터 검증 을 하 는 지 전면적으로 소개 할 것 이다.
본문 소스 코드:https://gitee.com/yintianwen7/taven-springboot-learning/tree/master/springboot-validate
준비 작업
우 리 는spring-boot-starter-web가방 만 도입 하면 사용 할 수 있다.
1.상용 주해

상용 주해
2.간단 한 실체 검사

public class CardDTO {

  @NotBlank
  private String cardId;

  @Size(min = 10, max = 10)
  @NotNull
  private String cardNum; //   

  @Past
  @NotNull
  private Date createDate;

  @Range(max = 3)
  private String cardType;

  //   get set
}

@RestController
public class UserController {

  @PostMapping("simple")
  public Object simple(@RequestBody @Valid CardDTO cardDTO) {
    return cardDTO;
  }

}
  • 실체 속성 에 검사 주 해 를 추가 합 니 다
  • controller 방법 매개 변 수 를 사용 하기 전에@Valid 를 사용 하면 됩 니 다
  • 3.복잡 한 실체 검사
     3.1 내장 실체 검사
    
    public class UserDTO {
    
      @NotBlank
      private String userId;
    
      @NotBlank
      private String username;
    
      private String password;
    
      @Valid
      private List<CardDTO> cardList;
    
      //   get set
    }
    controller 는 같은 방법 으로 UserDTO cardlist 속성 에@Valid 주 해 를 표시 하면 됩 니 다.3.2 리스트검사

    잘못된 예제
    만약 우리 가 실체 List 를 검사 하고 싶다 면,위의 그림 에서 보 듯 이 이런 표기 법 은 전혀 효과 가 없다.
    우 리 는 끼 워 넣 고 검사 할 때 처럼List<CardDTO>을 한 층 포장 해 야 한다.
    
    public class ValidList<E> implements List<E> {
    
      @Valid
      private List<E> list = new ArrayList<>();
    
      public List<E> getList() {
        return list;
      }
    
      public void setList(List<E> list) {
        this.list = list;
      }
    
      //         
    }
    재 작성 실현 방법 은 this.list.xxx()를 완전히 사용 합 니 다.
    Gitee:spring 은 우리 가 정의 하 는 list 속성 에 데 이 터 를 봉인 하고@Valid 를 속성 으로 표시 하여 hibenate vaidator 가 우리 에 게 검증 할 수 있 도록 합 니 다!
    3.3@Validated 그룹 검사 사용 하기
    
    public interface Insert {
    }
    
    public interface Update {
    }
    두 개의 인터페이스 정의
    
    public class GroupCardDTO {
    
      @NotBlank(groups = {Update.class})
      private String id;
    
      @NotBlank(groups = {Insert.class})
      private String cardNum;
    
      @NotNull(groups = {Insert.class, Update.class})
      private Integer cardType;
    
      //   get set
    }
    실체 태그 의 주석 에 group 속성 추가
    
    @PostMapping("insert_card")
      public Object insert_card(@RequestBody @Validated(Insert.class) GroupCardDTO card){
        return card;
      }
    @Validated(xxx.class)태그 파 라 메 터 를 사용 하여 그룹 검사 완료!
    4.사용자 정의 주석 검사
    vaidator 가 제공 하 는 주석 이 우리 의 업무 수 요 를 만족 시 키 지 못 할 경우 사용자 정의 방식 으로 검증 할 수 있 습 니 다.
    필요:어떤 문자열 을 대문자 나 소문 자로 검사 해 야 합 니 다.
    
    public enum CaseMode {
      UPPER,
      LOWER
    }
    매 거 진 클래스 정의
    
    import javax.validation.Constraint;
    import javax.validation.Payload;
    import java.lang.annotation.*;
    
    @Target( { ElementType.FIELD })
    @Retention(RetentionPolicy.RUNTIME)
    @Constraint(validatedBy = CheckCaseValidator.class)
    @Documented
    public @interface CheckCase {
    
      String message() default "";
    
      Class<?>[] groups() default {};
    
      Class<? extends Payload>[] payload() default {};
    
      CaseMode value() default CaseMode.LOWER;
    
    }
  • 정의 주해
  • @Constraint 에서 우리 의 검증 논리 실현 클래스 를 지정 합 니 다
  • 
    import javax.validation.ConstraintValidator;
    import javax.validation.ConstraintValidatorContext;
    
    public class CheckCaseValidator implements ConstraintValidator<CheckCase, String> {
    
      private CaseMode caseMode;
    
      @Override
      public void initialize(CheckCase constraintAnnotation) {
        this.caseMode = constraintAnnotation.value();
      }
    
      @Override
      public boolean isValid(String value, ConstraintValidatorContext context) {
    
        if (value == null || "".equals(value.trim())) {
          return false;
        }
    
        switch (this.caseMode) {
          case LOWER:
            return value.equals(value.toLowerCase());
          case UPPER:
            return value.equals(value.toUpperCase());
          default:
            return false;
        }
    
      }
    
    }
  • initialize()초기 화 시 실행 되 며,주석 에 있 는 속성 을 가 져 올 수 있 습 니 다
  • isValid()우리 의 검증 논리 실현
  • 비고
    사용자 정의 설명 은@Validated group 그룹 을 지원 합 니 다.
    이 절 소스 코드:https://gitee.com/yintianwen7/taven-springboot-learning/tree/master/springboot-validate
    로 컬 다운로드 주소:springboot-validate_jb51.rar
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기