如何从 if-else 的参数校验中解放出来? (3)

在创建用户信息时,不需要校验userId;但在更新用户信息时,需要校验userId,而用户名,邮箱等两种情况都得校验。这种情况,就可以分组校验来解决了。

3.1 定义分组接口

Create.java

import javax.validation.groups.Default; public interface Create extends Default { }

Update.java

import javax.validation.groups.Default; public interface Update extends Default { } 3.2 在UserDTO 需要校验的字段添加声明 /** * 用户id(只有在有Update分组中校验非空) */ @NotNull(message = "id 不能为空", groups = Update.class) private Long userId; 3.3 控制层入参位置进行声明 @RestController @RequestMapping("/groups") public class ValidatorGroupsController { /** * 更新数据,需要传入userID * @param userDTO * @return */ @PostMapping("/update") public HttpResult updateData(@Validated(Update.class)UserDTO userDTO) { return HttpResult.success(userDTO); } /** * 新增数据,不需要传入userID * @param userDTO * @return */ @PostMapping("/create") public HttpResult createData(@Validated(Create.class)UserDTO userDTO) { return HttpResult.success(userDTO); } } 3.4 分组校验的测试-新增测试

请求方式:POST

请求地址:localhost:8080/groups/create

请求参数:

userName:Van mobile:17098705205 email:110@qq.com idNumber:350583197106150219 userId:

返回结果:

{ "success": true, "code": 200, "data": { "userId": null, "sex": null, "userName": "Van", "mobile": "17098705205", "email": "110@qq.com", "idNumber": "350583197106150219", "passWord": null }, "message": null }

请求成功,说明新增请求,不检验userId,即userId可以为空。

3.5 分组校验的测试-更新测试

请求方式:POST

请求地址:localhost:8080/groups/update

请求参数:同上(3.4)

返回结果:

{ "success": false, "code": 400, "data": null, "message": "id 不能为空" }

请求失败,说明更新请求,检验userId,即userId不能为空。

结合 3.4 与 3.5 的测试结果,说明分组校验成功。

四、总结

希望大家写的每一行代码都是业务需要,还不是无聊且无穷无尽的参数校验。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxxpz.html