1. 概述
本篇是数据验证系列最后篇,将会给大家介绍分组验证;上一篇自定义验证注解中有提到,groups属性,它正是用来分组验证,解决”一些条件需要验证某个属性,另外的条件不需要验证该属性”的情形。
2. 源码分析
2.1. 添加pom.xml依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.2 创建实体类和分组验证接口
@Data
public class User {
public interface Default{}
public interface Update{}
@NotNull(message = "id不能为空" , groups = Update.class)
private Long id;
@NotNull(message = "名字不能为空", groups = Default.class)
@Length(min = 4, max = 10, message = "name 长度必须在 {min} - {max} 之间", groups = Default.class)
private String name;
@NotNull(message = "年龄不能为空", groups = Default.class)
@Min(value = 18, message = "年龄不能小于18岁", groups = Default.class)
private Integer age;
}
groups属性用来分组,@Validated注解的value属性匹配相同的groups,纳入验证访问;
上面代码,更新user时需要验证id非空,其余情况无需验证
2.3 Controller层
@RestController
public class UserController {
@PostMapping("/user")
public R addUser(@Validated(value = User.Default.class) @RequestBody User user, BindingResult br){
if(br.hasErrors()){
return R.isFail().msg(br.getFieldError().getDefaultMessage());
} else {
return R.isOk().data(user);
}
}
@PutMapping("/user")
public R updateUser(@Validated(value = {User.Update.class, User.Default.class}) @RequestBody User user,
BindingResult br) {
if(br.hasErrors()){
return R.isFail().msg(br.getFieldError().getDefaultMessage());
} else {
return R.isOk().data(user);
}
}
}
使用REST风格
Post方法对应新增,@Validated(value = User.Default.class说明无需验证id非空
Put方法对应更新,@Validated(value = {User.Update.class, User.Default.class}说明需要默认验证和非空验证
3. 测试结果
两个接口参数内容一致,都缺少id字段 ,但 insert 是成功的,而 update接口中提示了id不能为空;测试结果表明,符合我们的预期要求。
4. 工程目录
5. 结束语
说点什么呢,有任何建议,欢迎留言探讨,本文源码。
---------------------
作者:Mkeeper
来源:CSDN
原文:https://blog.csdn.net/liu19900205/article/details/81698985
版权声明:本文为博主原创文章,转载请附上博文链接!