若依上参数验证抛出异常示例
【代码】若依上参数验证抛出异常示例。
目录
一、问题引出:
当我们在若依模块中添加数据时,有时会出现添加数据格式错误,通常前端也就是我们直接能在界面上看见的报错,如下图岗位管理里边所示。
当我们在岗位编码处修改成诸如多于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个字符”
更多推荐
所有评论(0)