SpringBoot使用hibernate validator校验

  

本文将全面的介绍如何使用验证器进行数据校验

  

本文源码:https://gitee.com/yintianwen7/taven-springboot-learning/tree/master/springboot-validate

  

<>强准备工作

  

我们只需要引入<代码> spring-boot-starter-web>   

<强> 1。常用注解

  

 SpringBoot使用hibernate validator校验

  

常用注解

  

2。简单的实体校验

        公开课CardDTO {      @NotBlank   私人字符串cardId;      @ (min=10, max=10)   @NotNull   私人字符串cardNum;//卡号      @Past   @NotNull   私人createDate日期;      @Range (max=3)   私人字符串cardType;//省略得到设置   }            @RestController   公开课用户控件{      @PostMapping(“简单”)   公共对象简单(@RequestBody @Valid CardDTO CardDTO) {   返回cardDTO;   }      }      
      <李>实体属性上添加校验注解   <李>控制器方法参数前使用@Valid即可李   
  

3。复杂的实体校验

  

, <强> 3.1嵌套实体校验

        公开课UserDTO {      @NotBlank   私人字符串标识;      @NotBlank   私人字符串的用户名;      私人密码字符串;      @Valid   私人ListcardList;//省略得到设置   }      

控制器写法同上,只是在UserDTO cardList属性上标记@Valid注解即可。3.2 List校验

  

 SpringBoot使用hibernate validator校验

  

无效示例

  

如果我们想校验一个实体列表,如上图所示的这种写法是完全不起效的。

  

我们需要像<强>嵌套校验强时一样,对<代码> List         公开课ValidList实现List{      @Valid   私人List,列表=new ArrayList<的在();      公共ListgetList () {   返回列表;   }      公共演唱会的曲目(List列表){   这一点。列表=;   }//省略了实现方法   }      

重写实现方法完全使用this.list.xxx ()

  

Gitee:春天会将数据封装到我们定义的列表属性中,又将属性声明了@Valid使得hibernate验证器可以为我们做校验!

  

<强> 3.3使用@Validated分组校验

        公共接口插入{   }      公共接口更新{   }      

定义两个接口

        公开课GroupCardDTO {      @NotBlank(组={Update.class})   私人字符串id;      @NotBlank(组={Insert.class})   私人字符串cardNum;      @NotNull(组={插入。类,Update.class})   私人整数cardType;//省略得到设置   }      

实体标记的注解中添加群属性

        @PostMapping (“insert_card”)   公共对象insert_card (@RequestBody @Validated (Insert.class) GroupCardDTO卡){   回帖;   }      

使用@Validated (xxx.class)标记参数,完成分组校验!

  

4。自定义注解校验

  

当验证器提供的注解无法满足我们的业务需求,可以通过自定义的方式来实现校验。

  

需求:校验某字符串必须为大写或者小写

        公共enum CaseMode {   上,   较低的   }      

定义一个枚举类

        进口javax.validation.Constraint;   进口javax.validation.Payload;   进口java.lang.annotation。*;      @Target({应用。场})   @Retention (RetentionPolicy.RUNTIME)   @Constraint (validatedBy=CheckCaseValidator.class)   @Documented   公共@ interface CheckCase {      字符串消息()默认””;      Class<& # 63;在[]组默认(){};      Class<& # 63;扩展Payload>[]有效载荷(){}违约;      默认CaseMode.LOWER CaseMode值();      }      
      <李>定义注解   <李> @Constraint指定我们的校验逻辑实现类李   
        进口javax.validation.ConstraintValidator;   进口javax.validation.ConstraintValidatorContext;      公共类CheckCaseValidator实现ConstraintValidator

SpringBoot使用hibernate validator校验