本文将全面的介绍如何使用验证器进行数据校验
本文源码:https://gitee.com/yintianwen7/taven-springboot-learning/tree/master/springboot-validate
<>强准备工作强>
我们只需要引入<代码> spring-boot-starter-web> 代码包即可使用
<强> 1。常用注解强>
常用注解
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
无效示例
如果我们想校验一个实体列表,如上图所示的这种写法是完全不起效的。
我们需要像<强>嵌套校验>强时一样,对<代码> List
公开课ValidList实现List { @Valid 私人List ,列表=new ArrayList<的在(); 公共List getList () { 返回列表; } 公共演唱会的曲目(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实现ConstraintValidatorSpringBoot使用hibernate validator校验