这里不同的字段上加了 groups 属性,指明属于哪个分组 。注意在该实体类中我们又定义了 2 个类 G1,G2 就是为了分组用的(具体指明哪个分组) 。接口处理:
@RequestMapping(value = https://www.isolves.com/it/cxkf/kj/2023-11-08/"/valid/save1", method = RequestMethod.POST)public Object save1(@RequestBody @Validated(Users.G1.class) Users user, BindingResult result) {Optional在这个两个接口中 @Validated(Users.G2.class)分别指明了自己的分组,接下来测试看看效果 。> op = valid(result) ;if (op.isPresent()) {return op.get() ;}return "success" ;}@RequestMapping(value = "/valid/save2", method = RequestMethod.POST)public Object save2(@RequestBody @Validated(Users.G2.class) Users user, BindingResult result) {Optional
> op = valid(result) ;if (op.isPresent()) {return op.get() ;}return "success" ;}
分组 G1 测试:

文章插图
图片
从这里返回的信息来看我们的 phone 虽然写了@NotEmpty 但是并没有起作用,因为我们并没有指明他的分组,并且接口上我们指明了是用 G1 分组 。
分组 G2 测试:

文章插图
图片
在这个接口中发现 name 验证是 G1 的,所以这里不会进行校验,并且年龄的判断是不能小于 20 了 。
- 单个参数校验
@Validatedpublic class UsersController extends BaseController {@PackMapping("/valid/find")public Object find(@NotEmpty(message = "参数 Id 不能为空") String id) {return "查询到参数【" + id + "】" ;}}该接口中直接将注解应用到参数上 。测试:
文章插图
图片
同时控制台会输出如下异常:

文章插图
图片
你也发现这种异常信息提示很不友好,接下来我们做个简单的局部异常处理 。
我们只需要在Controller添加如下方法即可:
@ExceptionHandler(ConstraintViolationException.class)@ResponseBodypublic Object ConstraintViolationExceptionHandler(ConstraintViolationException e) {String message = e.getConstraintViolations().stream().map(ConstraintViolation::getMessage).collect(Collectors.joining());return message ;}在该 Controller 中我们添加了一个异常处理句柄(简单吧将错误信息输出) 。
文章插图
图片
- 嵌套参数校验
public class Users {@NotEmpty(message = "姓名不能为空", groups = G1.class)private String name ;@Min(value = https://www.isolves.com/it/cxkf/kj/2023-11-08/10, message = "年龄不能小于 10", groups = G1.class)@Min(value = 20, message = "年龄不能小于 20", groups = G2.class)private Integer age ;@Length(min = 6, max = 18, message = "邮箱介于 6 到 18 之间", groups = {G1.class, G2.class})private String email ;@NotEmpty(message = "电话必需填写")private String phone ;@Validprivate Address address;}注意:嵌套对象 Address 的校验需要在上面加@Valid 注解 。public class Address {@NotEmpty(message = "地址信息必需填写")private String addr ;}测试接口:@RequestMapping(value = https://www.isolves.com/it/cxkf/kj/2023-11-08/"/valid/save3", method = RequestMethod.POST)public Object save3(@RequestBody @Validated Users user, BindingResult result) {Optional> op = valid(result) ;if (op.isPresent()) {return op.get() ;}return "success" ;}
接口上没有什么特别的与之前的一模一样 。注意:这里的校验没有设定分组,所以校验时都是校验的没有设置分组的字段 。测试:

文章插图
图片
这里发现我们的地址信息根本就没有进行校验 。接着我们吧参数变动下
推荐阅读
- 真我v3手机配置参数,真我v3为什么没有屏幕刷新率
- 聊聊接口重试机制的几种解决方案
- 如何查看显卡型号及参数
- 苹果12手机参数配置,苹果12参数详细参数配置
- tr4怎么过,tr4x3螺纹参数
- Springboot 框架中事件监听和发布机制详细介绍
- tpc接口是什么,tpc接口长什么样
- 如何将本地jar文件打包到 springboot 执行jar文件中
- vivoy52s参数配置
- 显卡接口是什么意思,问独立显卡的2个接口都是做什么的
