一、触发方式
进入路径:系统管理 → 角色管理 → 修改
将"普通角色"的权限字符栏填入超过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) 返回前端。
五、小结
后端参数验证生效且程序抛出异常不崩溃,需要以下条件:
- 参数验证注解(如
@Size)修饰在实体类属性的 getter 方法上 - 使用
@Validated修饰 Controller 接口方法的对应参数 @RestControllerAdvice注册全局异常处理类- 正确处理
MethodArgumentNotValidException异常类型
449

被折叠的 条评论
为什么被折叠?



