参数验证以及自定义参数验证注解,触发验证抛出异常报错

本文详细描述了前端输入空格导致的MethodArgumentNotValidException异常,涉及前后端代码分析、自定义参数验证注解实践以及异常处理过程。重点讲解了如何确保参数验证有效并处理此类异常。
摘要由CSDN通过智能技术生成

目录

1.触发验证抛出异常及前后端现象

2.前后端代码分析

前端代码分析

后端代码分析

后端引起异常的部分原因

异常处理

1.checkDeptNameUnique

2.MethodArgumentNotValidException

3.总结触发验证抛出异常的过程

4.自定义参数验证注解,触发验证抛出异常报错实践


1.触发验证抛出异常及前后端现象

前端现象

后端现象

11:12:35.573 [http-nio-8080-exec-53](线程) ERROR(log级别) 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.SysDeptController.edit(出异常的文件)(com.ruoyi.common.core.domain.entity.SysDept): [Field error in object 'sysDept' on field 'deptName': rejected value [ ](具体方位); codes [NotBlank.sysDept.deptName,NotBlank.deptName,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [sysDept.deptName,deptName]; arguments []; default message [deptName]]; default message [部门名称不能为空]] 

MethodArgumentNotValidException为异常类型

2.前后端代码分析

前端代码分析

表单校验的方法为rules

rules内容里要求部门名称不能为空,但我们打了空格骗过了前端使其能给后端发信息

查看提交方法submitForm,其中updataDept发起HTTP PUT与后台交互,请求URL:/system/dept

后端返回信息"部门名称不能为空",前端的处理逻辑,返回code 为500 时,输出错误提示Message 框

/src/utils/request.js

后端代码分析

后端引起异常的部分原因

这里看到可引起异常的有:部门名称已存在,上级部门不能是自己,该部门包含未停用的子部门

SysDept 类对属性deptId 的限制如下 原因:当deptId 不满足两个注解限制时,会抛出异常

异常处理
1.checkDeptNameUnique

如上上图,若异常为“部门名称已存在,上级部门不能是自己,该部门包含未停用的子部门”

捕获器为checkDeptNameUnique,

如上上图处理函数为

public AjaxResult edit(@Validated @RequestBody SysDept dept)

并return AjaxResult.error的内容(这里不知道异常类型怎么写)

2.MethodArgumentNotValidException

这里空格的异常处理类为MethodArgumentNotValidException,

3.总结触发验证抛出异常的过程

  • 修改前端部门名称为空格
  • 点击确定与后台交互,请求URI:/system/role
  • 后台检测到SysDept 的参数deptId 不符合要求,则抛出异常类型MethodArgumentNotValidException
  • 异常被全局异常处理器捕获,返回message 给到前端,且错误码是500
  • 前端路由截获错误码500 的信息,进行处理显示message 内容

其中

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

  • 参数验证注解修饰在所需类属性的getter 或属性上
  • 使用注解@Validated 修饰接口函数的对应类的形参
  • @RestControllerAdvice 注册全局异常处理类
  • 正确处理类型MethodArgumentNotValidException 异常

4.自定义参数验证注解,触发验证抛出异常报错实践

注解限制类型

这里我们使用@Pattern

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值