若依上参数验证抛出异常示例

本文详细探讨了在若依模块中遇到的数据添加格式错误问题,具体表现为岗位编码超过64个字符导致的前端和后端报错。前端在用户界面直接展示错误信息,后端通过异常处理返回500状态码。源码解析揭示了前端Vue组件如何处理HTTP PUT请求以及后端使用@Validated注解进行参数验证,全局异常处理器如何捕获并响应错误。
摘要由CSDN通过智能技术生成

目录

一、问题引出:

二、示例展现:

①前端部分:

②后端部分:

 三、源码详解:

前端部分:

 后端部分: 

 逻辑总结:


一、问题引出:

当我们在若依模块中添加数据时,有时会出现添加数据格式错误,通常前端也就是我们直接能在界面上看见的报错,如下图岗位管理里边所示。

 当我们在岗位编码处修改成诸如多于64个字符时就会产生报错,那么此时后端其实也会对此做出反应处理。

二、示例展现:

①前端部分:

 如上图所示 直接提示我们岗位编码长度不能超过64个字符。

②后端部分:

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.SysPostController.edit(com.ruoyi.system.domain.SysPost): [Field error in object 'sysPost' on field 'postCode': rejected value [222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222]; codes [Size.sysPost.postCode,Size.postCode,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [sysPost.postCode,postCode]; arguments []; default message [postCode],64,0]; default message [岗位编码长度不能超过64个字符]] 
org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public com.ruoyi.common.core.domain.AjaxResult com.ruoyi.web.controller.system.SysPostController.edit(com.ruoyi.system.domain.SysPost): [Field error in object 'sysPost' on field 'postCode': rejected value [222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222]; codes [Size.sysPost.postCode,Size.postCode,Size.java.lang.String,Size]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [sysPost.postCode,postCode]; arguments []; default message [postCode],64,0]; default message [岗位编码长度不能超过64个字符]] 
	at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:141)
	at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:122)
	at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:179)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:146)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
	at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:920)

可以明显看出后端报错了一大串东西,说明此时后端也在处理这个报错。

 三、源码详解:

前端部分:

在index.vue中可以看到submitForm函数负责处理点击“确定”按钮之后做出反应:

 确定后,通过updatePost 函数对URI 为/system/post 发起HTTP PUT 操作,请求body 为data



 
从浏览器开发者工具可以看到,整体的HTTP请求URL为http://localhost/dev-api/system/post

后端返回信息,前端的处理逻辑,返回code为500 时,输出错误提示message框


 

 后端部分:


 其中@Validtated为需要对SysPost参数验证使用的注解。


 当PostCode不满足两个注解限制时。就会抛出异常,同时显示message“岗位编码长度不能超过64个字符”


 @RestControllerAdvice用于注册全局异常 处理器类 指定异常捕捉类的处理函数;

 MethodArgumentNotValidException为指定异常 捕捉类型的处理函数,其中AjaxResult.error中设置为error为500;


如前面所示,当然SysPost属性postCode不满足要求时 ,就会抛出异常MethodArgumentNotValidException

 逻辑总结:

1.前端修改岗位编码长度字符超过64位,点击确定后与后台交互,请求码为URI:/system/post;

2.后台检测到SysPost的参数PostCode不符合要求就会抛出异常 MethodArgumentNotValidException;

3.异常被全局异常处理器捕获,返回message给前端,且错误码是500;

4.前端路由截获错误码500的信息,前台直接显示message里边的信息“

岗位编码长度不能超过64个字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值