springboot注解校验参数

实例
基本应用
引入依赖
1 2 3 4 | <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> |
Controller 中需要校验的参数Bean前添加Validated
public ResultVO updateSysUser(@RequestBody @Validated(Groups.Update.class) SysUserIPt sysUserIPt) { String token = request.getHeader(CommonConstant.ACCESS_TOKEN); SysUser userInfo = (SysUser)redisService.get(CommonConstant.PREFIX_USER_INFO+token); SysUser sysUser = BeanConvertor.convertBean(sysUserIPt,SysUser.class); try { int count = sysUserService.updateSysUser(sysUser,userInfo); } catch (Exception e) { e.printStackTrace(); return ResultVO.vo(ResultCode.ERROR,e.getMessage()); } SysUserIPo sysUserIPo = BeanConvertor.convertBean(sysUser, SysUserIPo.class); return ResultVO.vo(sysUserIPo); }
给参数对象添加校验注解
/** * 用户ID */ @NotEmpty(message = "用户id不能为空" , groups = Groups.Update.class) private String userId; /** * 部门ID */ @NotEmpty(message = "部门ID不能为空",groups = Groups.Add.class) @NotEmpty(message = "部门ID不能为空",groups = Groups.Update.class) private String deptId; /** * 登录账号 */ @NotEmpty(message = "登录账号不能为空",groups = Groups.Add.class) @NotEmpty(message = "登录账号不能为空",groups = Groups.Update.class) private String loginName;
异常的统一处理
参数校验不通过时,会抛出 BingBindException 异常,可以在统一异常处理中,做统一处理。
/** * 方法参数错误异常 * @param e * @return */ @ExceptionHandler({MethodArgumentNotValidException.class,BindException.class}) @ResponseStatus(HttpStatus.BAD_REQUEST) public ResultVO<Object> MethodArgumentNotValidExceptionHandler(Exception e) { log.error("参数异常"); BindingResult bindingResult = null; Map map = new HashMap<>(); if (e instanceof MethodArgumentNotValidException) { bindingResult = ((MethodArgumentNotValidException)e).getBindingResult(); } else if (e instanceof BindException) { bindingResult = ((BindException)e).getBindingResult(); } bindingResult.getFieldErrors().forEach((fieldError)-> map.put(fieldError.getField(),fieldError.getDefaultMessage()) ); return ResultVO.vo( ResultCode.VALIDATE_FAILED , map); }
然后加上分组校验
public class Groups {
public interface Add{}
public interface Update{}
}
就成功了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术