在创建用户信息时,不需要校验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 的测试结果,说明分组校验成功。
四、总结希望大家写的每一行代码都是业务需要,还不是无聊且无穷无尽的参数校验。