参数验证异常触发实例——以角色权限字符超长为例

一、触发方式

进入路径:系统管理 → 角色管理 → 修改

将"普通角色"的权限字符栏填入超过100个字符的内容,点击确定。

二、前端现象

页面顶部弹出错误提示框:权限字符长度不能超过100个字符

三、后端报错日志

IDEA Run Tab 输出如下:

10:42:35.542 [http-nio-8080-exec-35] 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.edit(com.ruoyi.common.core.domain.entity.SysRole): [Field error in object 'sysRole' on field 'roleKey': rejected value [common11111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222223333333333333333333333333333333333333333333333333333333333333333333333333333333333333344444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444455555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555566666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777788888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888999999999999999999999999999999999999]; 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个字符]] 

四、源码分析
1. 前端代码

发起 HTTP 请求(src/api/system/role.js):

点击确定后调用 updateRole,向 /system/role 发起 PUT 请求。

前端收到后端返回后的处理(src/utils/request.js):

后端返回 code: 500 时,前端弹出错误提示框显示 msg 内容

2. 后端代码

Controller(SysRoleController.java):

关键注解 @Validated:告诉 Spring 对 role 参数执行验证。

实体类限制(SysRole.java):

roleKey 长度超过100,@Size 注解触发,抛出 MethodArgumentNotValidException

全局异常处理(GlobalExceptionHandler.java):

捕获异常后提取注解中的提示语,封装成 AjaxResult(code=500) 返回前端。

五、小结

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

  1. 参数验证注解(如 @Size)修饰在实体类属性的 getter 方法上
  2. 使用 @Validated 修饰 Controller 接口方法的对应参数
  3. @RestControllerAdvice 注册全局异常处理类
  4. 正确处理 MethodArgumentNotValidException 异常类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值