利用@Validated的分组功能可以实现简单的属性条件校验,效果类似对校验添加一个开关,一个方法对属性P不校验,而另一个方法对属性P进行校验。
遇到的问题是一个表分2页面存入数据库,实体类只定义了一个,两个页面要校验的属性不一样,就出现A页面更新时就会去检验B页面出现的属性,B页面更新时就去校验A页面的属性.
## 定义两个空接口
public interface UpdateA {
}
public interface UpdateB {
}
## 实体类中参数注解设置groups选项
@NotEmpty(message = "客户名称不能为空",groups = {UpdateA.class})
private String name;
@NotNull(message = "客户级别不能为空",groups = {UpdateB.class})
private String Level;
## 在controller的方法中指定要使用的groups选项
@PutMapping
@ApiOperation(value = "修改客户基本信息", tags = "客户")
public void updateCust1(@RequestBody @Validated({UpdateA.class}) Customer cust) {
}
@PutMapping
@ApiOperation(value = "修改客户其他信息", tags = "客户")
public void updateCust2(@RequestBody @Validated({UpdateB.class}) Customer cust) {
}
这样处理后,同一个实体类可以根据不同的方法有条件的校验不同的属性