若依框架实战:参数验证异常处理(手机号码格式验证案例)
一、前言在后端开发中参数校验是保证接口健壮性的第一道防线。若依Ruoyi框架作为主流的 Java 后台管理系统框架内置了完善的参数验证与全局异常处理机制。本文将以用户管理模块的手机号码格式验证为例从触发验证、异常抛出、源码分析、异常总结四个维度详解若依框架下参数验证异常的完整处理流程。二、验证场景简介1. 业务场景用户管理 - 修改用户信息访问路径系统管理 → 用户管理 → 修改2. 验证目标字段phonenumber手机号码验证规则NotBlank手机号码不能为空Pattern必须符合 11 位手机号格式3. 测试用例表格测试输入验证结果13812345678正常11 位12345格式错误过短123456789012格式错误过长三、触发验证并抛出异常1. 操作步骤进入系统管理 → 用户管理点击修改按钮输入12345678901212 位手机号超出长度限制2. 前端验证效果前端会直接拦截请求弹出提示手机号码格式不正确请输入 11 位有效手机号前端验证说明基于Pattern注解自动生成校验规则失焦 / 提交时触发校验阻止表单提交友好提示3. 后端异常日志IDEA 控制台输出如下异常java运行2024-01-15 14:32:18.456 [http-nio-8080-exec-5] ERROR c.r.f.w.e.GlobalExceptionHandler - [validExceptionHandler,104] Validation failed for argument [0] in public com.ruoyi.common.core.domain.AjaxResult com.ruoyi.web.controller.system.SysUserController.edit(...): [Field error in object sysUser on field phonenumber: rejected value [123456789012]; default message [手机号码格式不正确]]异常核心信息异常捕获GlobalExceptionHandler异常位置SysUserController.edit()异常类型MethodArgumentNotValidException错误字段sysUser.phonenumber格式错误四、完整源码分析1. 前端实现Vue ElementUI表单组件edit.vuevueel-form-item label手机号码 propphonenumber el-input v-modelform.phonenumber placeholder请输入手机号码 maxlength11 / /el-form-item验证规则javascript运行rules: { phonenumber: [ { required: true, message: 手机号码不能为空, trigger: blur }, { pattern: /^1[3-9]\d{9}$/, message: 手机号码格式不正确, trigger: blur } ] }提交方法javascript运行updateUser() { this.$refs[form].validate(valid { if (valid) { updateUser(this.form).then(res { this.msgSuccess(修改成功); }); } }); }API 封装user.jsjavascript运行// 更新用户信息 export function updateUser(data) { return request({ url: /system/user, method: put, data: data }) }2. 后端实现SpringBoot ValidationController 层SysUserController.javajava运行RestController RequestMapping(/system/user) public class SysUserController { PutMapping public AjaxResult edit(Validated RequestBody SysUser user) { return userService.updateUser(user); } }实体类校验SysUser.javajava运行public class SysUser extends BaseEntity { NotBlank(message 手机号码不能为空) Pattern(regexp ^1[3-9]\\d{9}$, message 手机号码格式不正确) private String phonenumber; // getter setter }全局异常处理GlobalExceptionHandler.javajava运行RestControllerAdvice public class GlobalExceptionHandler { ExceptionHandler(MethodArgumentNotValidException.class) public AjaxResult validExceptionHandler(MethodArgumentNotValidException e) { String message e.getBindingResult().getFieldError().getDefaultMessage(); return AjaxResult.error(message); } }五、参数验证生效必备条件若要让后端参数验证正常生效、抛出异常但不崩溃必须满足以下 4 点添加验证注解在实体类字段上添加NotBlank、Pattern、NotNull等校验注解。开启验证注解Controller 接口参数添加Validated注解。全局异常处理器使用RestControllerAdvice注册全局异常处理类。捕获对应异常精准捕获MethodArgumentNotValidException参数验证异常。六、注意事项NotNull不建议用于基本数据类型int、long 等有默认值无法校验 null建议使用包装类型Integer、Long、String配合校验前端校验 后端校验双重保障避免非法参数入库正则表达式需严格匹配业务规则手机号^1[3-9]\\d{9}$七、总结本文通过手机号码验证实战案例完整演示了若依框架下前端表单校验逻辑后端参数校验注解全局异常捕获与返回验证异常完整链路掌握这套机制可快速实现统一、规范、安全的接口参数校验提升系统稳定性与开发效率。