Spring 参数验证使用示例(基于 RuoYi 项目)
一、触发方式进入系统管理 → 角色管理点新增在权限字符里填入超过100个字符的内容点确定。二、前端现象2.1 页面报错提示前端弹出红色提示框显示权限字符长度不能超过100个字符。2.2 HTTP 请求信息从浏览器开发者工具可以看到前端通过HTTP POST请求把数据发送到后端请求URL为 http://localhost/dev-api/system/role。2.3 请求体内容请求体里可以看到roleKey字段携带了我们填入的超长字符串。2.4 后端返回信息后端返回了code 500msg为权限字符长度不能超过100个字符前端收到这个响应后弹出红色提示框。三、后端现象3.1 IDEA Run窗口日志后端IDEA的Run窗口输出了ERROR日志10:25:33.675 [http-nio-8080-exec-56] ERROR c.r.f.w.e.GlobalExceptionHandler - [handleMethodArgumentNotValidException,101] - Validation failed for argument [0] in public com.ruoyi.common.core.domain.AjaxResult com.ruoyi.web.controller.system.SysRoleController.add(com.ruoyi.common.core.domain.entity.SysRole): [Field error in object sysRole on field roleKey: rejected value [aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa]; codes [Size.sysRole.roleKey,Size.roleKey,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [sysRole.roleKey,roleKey]; arguments []; default message [roleKey],100,0]; default message [权限字符长度不能超过100个字符]]可以看到谁捕获了异常GlobalExceptionHandler哪里抛出的异常SysRoleController.add()具体是哪个字段出了问题roleKey拒绝的值超过100个字符的字符串异常类型MethodArgumentNotValidException3.2 持久化Log文件从logback.xml配置文件可以看到Log文件的存放路径配置为 D:/ruoyi/logs。打开这个路径可以看到项目按日期生成了不同的error日志文件sys-error.2026-05-06就是我们触发报错当天生成的文件。打开这个文件在里面同样可以找到我们触发的那条ERROR记录包含了roleKey字段验证失败的完整信息。生产环境下没有IDEA时就是通过这个文件来排查问题的。四、相关代码分析4.1 SysRole.java验证注解加在字段上NotBlank 限制权限字符不能为空Size(max100) 限制长度不能超过100个字符当传入的值不满足这两个条件时就会抛出异常。4.2 SysRoleController.javaValidated 触发验证Validated 加在方法参数上告诉Spring对这个参数进行验证。没有这个注解的话SysRole里的验证注解不会生效。4.3 GlobalExceptionHandler.java捕获异常并返回错误信息RestControllerAdvice 注册全局异常处理类ExceptionHandler 指定捕获哪种异常。当验证失败抛出MethodArgumentNotValidException时这里会捕获它取出错误信息返回给前端前端收到后显示红色提示框。五、小结后端参数验证生效且程序抛出异常不崩溃需要满足以下四个条件1.参数验证注解修饰在所需类属性的getter或属性上。2.使用注解Validated修饰接口函数的对应类的形参。3.RestControllerAdvice注册全局异常处理类。4.正确处理MethodArgumentNotValidException类型的异常。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2596233.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!