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

若依框架实战:参数验证异常处理(手机号码格式验证案例)

一、前言

在后端开发中,参数校验是保证接口健壮性的第一道防线。若依(Ruoyi)框架作为主流的 Java 后台管理系统框架,内置了完善的参数验证与全局异常处理机制。

本文将以用户管理模块的手机号码格式验证为例,从触发验证、异常抛出、源码分析、异常总结四个维度,详解若依框架下参数验证异常的完整处理流程。


二、验证场景简介

1. 业务场景

用户管理 - 修改用户信息访问路径:系统管理 → 用户管理 → 修改

2. 验证目标

  • 字段:phonenumber(手机号码)
  • 验证规则:
    • @NotBlank:手机号码不能为空
    • @Pattern:必须符合 11 位手机号格式

3. 测试用例

表格

测试输入验证结果
13812345678正常(11 位)
12345格式错误(过短)
123456789012格式错误(过长)

三、触发验证并抛出异常

1. 操作步骤

  1. 进入:系统管理 → 用户管理
  2. 点击:修改按钮
  3. 输入:123456789012(12 位手机号,超出长度限制)

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.vue)

vue

<el-form-item label="手机号码" prop="phonenumber"> <el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" /> </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.js)

javascript

运行

// 更新用户信息 export function updateUser(data) { return request({ url: '/system/user', method: 'put', data: data }) }

2. 后端实现(SpringBoot + Validation)

Controller 层(SysUserController.java)

java

运行

@RestController @RequestMapping("/system/user") public class SysUserController { @PutMapping public AjaxResult edit(@Validated @RequestBody SysUser user) { return userService.updateUser(user); } }
实体类校验(SysUser.java)

java

运行

public class SysUser extends BaseEntity { @NotBlank(message = "手机号码不能为空") @Pattern(regexp = "^1[3-9]\\d{9}$", message = "手机号码格式不正确") private String phonenumber; // getter & setter }
全局异常处理(GlobalExceptionHandler.java)

java

运行

@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) public AjaxResult validExceptionHandler(MethodArgumentNotValidException e) { String message = e.getBindingResult().getFieldError().getDefaultMessage(); return AjaxResult.error(message); } }

五、参数验证生效必备条件

若要让后端参数验证正常生效、抛出异常但不崩溃,必须满足以下 4 点:

  1. 添加验证注解在实体类字段上添加@NotBlank@Pattern@NotNull等校验注解。

  2. 开启验证注解Controller 接口参数添加@Validated注解。

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

  4. 捕获对应异常精准捕获MethodArgumentNotValidException参数验证异常。


六、注意事项

  1. @NotNull不建议用于基本数据类型(int、long 等有默认值,无法校验 null)
  2. 建议使用包装类型(Integer、Long、String)配合校验
  3. 前端校验 + 后端校验双重保障,避免非法参数入库
  4. 正则表达式需严格匹配业务规则(手机号:^1[3-9]\\d{9}$

七、总结

本文通过手机号码验证实战案例,完整演示了若依框架下:

  • 前端表单校验逻辑
  • 后端参数校验注解
  • 全局异常捕获与返回
  • 验证异常完整链路

掌握这套机制,可快速实现统一、规范、安全的接口参数校验,提升系统稳定性与开发效率。

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

相关文章:

  • Windows安卓子系统开发指南:从零开始掌握跨平台应用部署
  • 母亲节文案引争议,OPPO 再致歉!
  • sage-wiki配置教程
  • Educational Codeforces Round 189 (Rated for Div. 2) F. String Cutting
  • RTOS抢占式调度原理与工程实践指南
  • 澎湃 OS4 底层重构!小米正式告别 MIUI
  • Affect Pulse AI:为AI助手注入轻量级情感交互层的实践指南
  • AI 技术日报 - 2026-05-12
  • Murata村田FB磁珠原厂原装一级代理商分销经销批发
  • 基于CLIP的本地化AI图像标注工具:原理、部署与优化实践
  • LazyAgent框架解析:快速构建AI智能体的开发实践
  • 国内可水洗蜡笔品牌哪家质量好?实测核心维度对比 - 得赢
  • 从ARIMA差分到神经网络:手把手教你用MIM网络搞定时空序列预测中的‘非平稳’难题
  • TalonOS与claw-extensions:构建AI智能体自主协作的认知框架与插件生态
  • 2026年4月可靠的活性炭吸附供应厂家推荐,催化燃烧RTO/RCO装置/湿式打磨台,活性炭吸附生产厂家怎么选择 - 品牌推荐师
  • QINGDA清达原厂原装一级代理商分销经销渠道
  • @valid和@Validated的区别是什么?
  • [BUUCTF]内涵的软件
  • 基于MCP协议的AI智能体如何自动化CRM数据管理与广告投放
  • VLA技术研究
  • Perplexity接入ScienceDirect文献库全链路解析(2024科研人必抢的AI学术入口)
  • 前端周报:Remix 3、Node 26 与 Chrome 148
  • Linux 性能分析工具 sar 历史数据缺失如何配置 sysstat 服务?
  • 别再死记硬背公式了!用Python动画可视化tf.nn.depth_to_space的完整数据搬运过程
  • 基于语义的会话搜索:从向量化到工程实践
  • 硬核干货!从RAG到多模态RAG:核心知识、架构Checklist与避坑实战指南
  • Unity手游资源逆向:从APK到Assembly-CSharp的提取与解析
  • 别再傻傻用matlab求逆了!用追赶法高效求解三对角矩阵(附MATLAB代码)
  • Terafab芯片项目正式启动;三星加速P5工厂建设1c纳米工艺支撑HBM4量产;香港科技大学研发的220磅月球建筑机器人正式亮相
  • 【2025最新】基于SpringBoot+Vue的夕阳红公寓管理系统管理系统源码+MyBatis+MySQL