前面两章中详细介绍了 数据验证
和 自定义验证
。本章是数据验证
的最后一篇,对分组校验做了笔记
[TOC]
分组验证
有的时候,我们对一个实体类需要有多中验证方式,在不同的情况下使用不同验证方式,比如说对于一个实体类来的 id 来说,新增的时候是不需要的,对于更新时是必须的,这个时候你是选择写一个实体类呢还是写两个呢?
在上一篇中介绍到注解需要有一个 groups
属性,这个属性的作用又是什么呢?
接下来就让我们看看如何用一个验证类实现多个接口之间不同规则的验证
…
环境/版本一览:
- 开发工具:Intellij IDEA 2018.2.2
- springboot: 2.1.0.RELEASE
- jdk:1.8.0_171
- maven:3.3.9
1、pom.xml
1 | <dependencies> |
2、application.yml
1 | server: |
3、groups
分组验证器
定义一个验证组,里面写上不同的空接口类即可
groups 属性的作用就让 @Validated 注解只验证与自身 value 属性相匹配的字段,可多个,只要满足就会去纳入验证范围;
1 | package com.fatal.groups; |
4、entity
1 | package com.fatal.entity; |
5、controller
insert
:所有属性为必填update
:与insert的属性交集为必填,其它属性可以为 null(用户没填充嘛),如果不为 null 的话就必须接受其它校验(如:String 长度最小为 1,Integer 最小值为 200 等等)other
:部分属性为必填
1 | package com.fatal.controller; |
显示
启动项目
可以使用 IDEA 自带的 RestClient
测试,也可以使用 Postman
测试
访问
http://localhost:8088/insert
访问
http://localhost:8088/update
填充
paperQuality
和pageNumber
不填充
paperQuality
和pageNumber
访问
http://localhost:8088/other
参考资料
一起来学SpringBoot | 第二十一篇:轻松搞定数据验证(三)
总结
update
的属性必须包括insert
的属性,要不然你update
的时候,传了insert
的属性,那么insert
的属性就没有参与校验了,这不合逻辑。所以呢?解决方法两种:
- 在
update
方法上参数位置的@Validated
的值两个都加上(只有两组的话,而且刚好互为补集的话你可以这么用,否则用下面这一种) - 在
数据传输对象
中,所有的校验注解的groups
属性两个都加上(推荐)
源码地址: https://github.com/ynfatal/springboot2-learning/tree/master/chapter26_3