本文为若依框架参数验证作业实战教程,按照官方 PPT 规范,全新实现手机号码长度校验异常,包含完整触发流程、前后端代码、异常日志与原理分析,可直接用于 CSDN 发布。
一、前言
在后端接口开发中,参数校验是保证系统稳定、数据合法的关键环节。传统手动if-else判断存在代码冗余、维护困难等问题,而若依框架基于 Spring Validation 实现了优雅的注解式参数验证,可大幅简化开发。
本文以用户管理模块 - 手机号码长度校验为例,完整复现参数验证异常触发、捕获、返回、日志记录全流程,与课堂 PPT 的「角色名称校验」形成独立新案例,完全符合作业要求。
二、异常触发方式
1. 业务场景
进入系统:系统管理 → 用户管理 → 新增 / 修改用户
2. 触发条件
在手机号码输入框中,输入超过 11 位的数字,例如:
plaintext
12345678901234567890(共20位)3. 预期结果
触发后端参数验证,前端提示:手机号码长度不能超过 11 个字符
三、前端现象展示
- 输入超长手机号码,点击确定提交
- 前端请求被正常发送(前端未完全拦截长度)
- 接口返回
500状态码 - 页面弹出提示:手机号码长度不能超过 11 个字符
前端返回报文
{ "code": 500, "msg": "手机号码长度不能超过11个字符" }四、前端代码分析
1. 页面输入框限制
文件路径:src/views/system/user/index.vue
<el-input v-model="form.phonenumber" placeholder="请输入手机号码" maxlength="11" />2. 表单验证规则
前端仅做格式正则校验,不限制长度,因此超长内容可提交到后端:
rules: { phonenumber: [ { pattern: /^1[3|4|5|6|7|8|9][0-9]\d{8}$/, message: "请输入正确的手机号码", trigger: "blur" } ] }3. 提交与接口请求
// 提交表单 submitForm: function() { this.$refs["form"].validate(valid => { if (valid) { updateUser(this.form).then(() => { this.$modal.msgSuccess("修改成功"); this.open = false; }) } }) } // 接口封装 user.js export function updateUser(data) { return request({ url: '/system/user', method: 'put', data: data }) }五、后端代码分析
1. 实体类字段校验(核心)
文件:SysUser.java给手机号码添加@Size注解,限制最大长度 11:
import jakarta.validation.constraints.Size; @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符") public String getPhonenumber() { return phonenumber; }2. Controller 开启验证
必须添加@Validated注解才能触发参数校验:
@PutMapping public AjaxResult edit(@Validated @RequestBody SysUser user) { return toAjax(userService.updateUser(user)); }3. 异常类型
参数不合法时,自动抛出:
MethodArgumentNotValidException六、全局异常处理(若依原生)
文件:GlobalExceptionHandler.java统一捕获参数验证异常,并返回友好提示:
@RestControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(MethodArgumentNotValidException.class) public Object handleMethodArgumentNotValidException(MethodArgumentNotValidException e) { log.error(e.getMessage(), e); String message = e.getBindingResult().getFieldError().getDefaultMessage(); return AjaxResult.error(message); } }七、后端日志信息(IDEA 控制台)
22:35:08.308 [http-nio-8080-exec-17] 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(com.ruoyi.common.core.domain.entity.SysUser): [Field error in object 'sysUser' on field 'phonenumber': rejected value [12345678901234567890]; codes [Size.sysUser.phonenumber,Size.phonenumber,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [sysUser.phonenumber,phonenumber]; arguments []; default message [phonenumber],11,0]; default message [手机号码长度不能超过11个字符]]日志关键信息
- 捕获者:
GlobalExceptionHandler - 抛出位置:
SysUserController.edit - 异常字段:
phonenumber - 错误信息:手机号码长度不能超过 11 个字符
八、生产环境日志查看
生产环境无法查看 IDE 控制台,异常会持久化到日志文件:
- 路径:
/home/ruoyi/logs/sys-error.log - 内容与控制台一致,可用于线上问题排查。
九、参数验证生效必备条件
- 实体类加验证注解:
@Size/@NotBlank/@NotNull等 - Controller 加
@Validated:开启参数验证 - 全局异常处理器:
@RestControllerAdvice - 捕获对应异常:
MethodArgumentNotValidException
十、总结
本文基于若依框架,全新实现了用户手机号码长度参数验证,与课堂「角色名称验证」完全独立,满足作业 “新例子” 要求。
通过注解式参数验证:
- 告别冗余
if-else - 统一异常处理
- 日志可追踪
- 前后端分离更清晰
📄 配套 PPT 在线查看:[若依框架实战:用户电话号码参数验证异常]
www.kdocs.cn/l/cuez57bdRZZs