感谢作者: http://www.spring4all.com/article/1228
本章也是轻松搞定数据验证
的最后一篇, 一起来揭开神秘的分组验证
分组验证
有的时候,我们对一个实体类需要有多中验证方式,在不同的情况下使用不同验证方式,比如说对于一个实体类来的 id 来说,新增的时候是不需要的,对于更新时是必须的,这个时候你是选择写一个实体类呢还是写两个呢?
在自定有数据有效性校验注解中介绍到注解需要有一个 groups
属性,这个属性的作用又是什么呢?
接下来就让我们看看如何用一个验证类实现多个接口之间不同规则的验证...
分组验证器
定义一个验证组,里面写上不同的空接口类即可
/**
* @author Ray
* @date 2018/7/4 0004
* 验证组
*/
public class Groups {
public interface Update{};
public interface Default{};
}
实体类
groups
属性的作用就让 @Validated
注解只验证与自身 value 属性相匹配的字段,可多个,只要满足就会去纳入验证范围;我们都知道针对新增的数据我们并不需要验证 ID 是否存在,我们只在做修改操作的时候需要用到,因此这里将 ID 字段归纳到 Groups.Update.class
中去,而其它字段是不论新增还是修改都需要用到所以归纳到 Groups.Default.class
中...
/**
* @author Ray
* @date 2018/7/4 0004
*/
public class Book3 {
@NotNull(message = "id 不能为空", groups = Groups.Update.class)
private Integer id;
@NotNull(message = "name 不允许为空", groups = Groups.Default.class)
private String name;
@NotNull(message = "price 不允许为空", groups = Groups.Default.class)
private BigDecimal price;
// 省略setter/getter
}
控制层
/**
* @author Ray
* @date 2018/7/4 0004
* 参数校验
*/
@RestController
public class ValidateController3 {
/**
* insert 方法并不关心 ID 字段
*/
@GetMapping("/insert")
public String insert(@Validated(value = Groups.Default.class)Book3 book3){
return "insert";
}
/**
* update 方法需要去验证 ID 是否为空
*/
@GetMapping("/update")
public String update(@Validated(value = {Groups.Default.class, Groups.Update.class}) Book3 book3){
return "update";
}
}
测试
完成准备事项后,启动项目,自行测试即可,测试手段相信大伙都不陌生了,如 浏览器
、postman
、junit
、swagger
,此处基于 postman
>insert接口
>update接口