当前位置: 首页 > news >正文

Spring 参数验证使用示例(基于 RuoYi 项目)

一、触发方式

进入系统管理 → 角色管理,点新增,在权限字符里填入超过100个字符的内容,点确定。

二、前端现象

2.1 页面报错提示

前端弹出红色提示框,显示"权限字符长度不能超过100个字符"。

2.2 HTTP 请求信息

从浏览器开发者工具可以看到,前端通过HTTP POST请求把数据发送到后端,请求URL为 http://localhost/dev-api/system/role。

2.3 请求体内容

请求体里可以看到roleKey字段携带了我们填入的超长字符串。

2.4 后端返回信息

后端返回了code 500,msg为"权限字符长度不能超过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个字符的字符串

异常类型:MethodArgumentNotValidException

3.2 持久化Log文件

从logback.xml配置文件可以看到,Log文件的存放路径配置为 D:/ruoyi/logs。

打开这个路径可以看到,项目按日期生成了不同的error日志文件,sys-error.2026-05-06就是我们触发报错当天生成的文件。

打开这个文件,在里面同样可以找到我们触发的那条ERROR记录,包含了roleKey字段验证失败的完整信息。生产环境下没有IDEA时,就是通过这个文件来排查问题的。

四、相关代码分析

4.1 SysRole.java:验证注解加在字段上

@NotBlank 限制权限字符不能为空,@Size(max=100) 限制长度不能超过100个字符,当传入的值不满足这两个条件时就会抛出异常。

4.2 SysRoleController.java:@Validated 触发验证

@Validated 加在方法参数上,告诉Spring对这个参数进行验证。没有这个注解的话,SysRole里的验证注解不会生效。

4.3 GlobalExceptionHandler.java:捕获异常并返回错误信息

@RestControllerAdvice 注册全局异常处理类,@ExceptionHandler 指定捕获哪种异常。当验证失败抛出MethodArgumentNotValidException时,这里会捕获它,取出错误信息返回给前端,前端收到后显示红色提示框。

五、小结

后端参数验证生效且程序抛出异常不崩溃,需要满足以下四个条件:

1.参数验证注解修饰在所需类属性的getter或属性上。

2.使用注解@Validated修饰接口函数的对应类的形参。

3.@RestControllerAdvice注册全局异常处理类。

4.正确处理MethodArgumentNotValidException类型的异常。

http://www.jsqmd.com/news/779692/

相关文章:

  • 如何截断SQL小数位数_使用TRUNCATE函数控制精度.txt
  • 2026年最新降AI软件排行:深度揭秘降AI原理,选降AI工具不踩坑! - 我要发一区
  • 如何理解 Kubernetes 的架构设计与实现原理?
  • 2026年至今,连云港天然朱砂实力门店盘点与优选分析:小白家高含量朱砂 - 2026年企业推荐榜
  • 将地址转换为可点击的 Google Maps 链接(类似 tel- 协议).txt
  • 关于hopfield 网络和受限玻尔兹曼机,其如何为现代深度学习奠基?
  • 别再瞎调WPF Grid布局了!Auto和*的实战用法,看完这篇就够了
  • Cortex-M调试连接器技术解析与应用实践
  • 同一件事的哪一层?——跨文化概念对勘的三阶校准法则
  • 四川盛世钢联国际贸易有限公司型钢频道 -螺纹钢|盘螺|盘圆|高线|高强钢 - 四川盛世钢联营销中心
  • 从“想”到“做”:手把手教你实现AI Agent Loop循环机制,解锁智能体进阶玩法!
  • 测试左移+AI:质量内建的终极形态?
  • FreeIPA容器化部署指南:从镜像选择到生产环境配置
  • 16.【Verilog】Verilog 时钟分频
  • Sonatype Nexus Repository Pro本地软件制品仓库
  • 3401黄大年茶思屋榜文保姆级全落地解法「34期 1题」全系统可编程安全易用高效统一架构重构与原约束双路径落地解法
  • 从机械转行互联网CV后,我决定再转多模态大模型,我的GitHub学习日志,带你避坑多模态转型之路!
  • 论文AIGC检测超标?一键去除论文AI率,只需要几分钟! - 我要发一区
  • 哪个降AI率工具好用?2026年5月最新测评,深度拆解降AI原理! - 我要发一区
  • 全网盘点降AI率工具:实测知网降AI效果,嘎嘎降遥遥领先! - 我要发一区
  • 基于JSP内置对象的服务器端表单验证实验
  • 我们训练了一个专测金融软件的AI模型,结果出乎意料
  • 当AI写小说——一个被严重低估的工程化战场
  • 别把 `temperature`、`top-k`、`top-p`、`beam search` 当成四个并列旋钮:很多生成问题,先调错的是“分布”还是“搜索”
  • 如何使用AI从文档中准确提取所有内容
  • 多模态情感分析中的模态缺失挑战与PRLF框架
  • 视频预测与深度估计的联合优化方法解析
  • AI率高于80%?2026年top10降AI软件汇总,3分钟降AI率? - 我要发一区
  • 2026降AI率软件TOP10:aigc痕迹一键去除,AI率低于20%! - 我要发一区
  • 常用代码知识