问题概述

关于这个问题,是在接口参数校验的时候遇到的,使用Spring Boot下spring-boot-starter-validation进行接口参数校验时出现 “  Validation failed for argument [0] in public ... ”

如下图:

具体信息如下:

org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in public ... arguments []; default message [remark],500,0]; default message [备注内容过长]] at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:139)at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:170)at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)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:1060)at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)at org.springframework.web.servlet.FrameworkServlet.doPut(FrameworkServlet.java:920)at javax.servlet.http.HttpServlet.service(HttpServlet.java:655)at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:887)at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1684)at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:748)

解决办法

经过排查,发现是validation使用不当导致的,
先看错误的写法:

    /*** Description:[通过实体添加新的员工数据]** @param EmployeeDTO [员工实体信息]* @return JSONResult* @date 2021-04-22* @author huazai*/@PostMapping("/addEmployee")@ApiOperation(value = "/addEmployee", notes = "通过实体添加新的员工数据")public JSONResult addEmployee(@Valid @RequestBody @ApiParam(name = "EmployeeDTO", value = "EmployeeDTO 实体类") EmployeeDTO employeeDTO) {try {// 验证员工信息是否重复if (EmployeeService.validateInsertEmployeeRepeat(employeeDTO)) {return JSONResult.failure(ResultCodeEnum.Failure.getCode(), Constant.MESSAGE_REPEAT_VALIDATE);}this.EmployeeService.insertEmployee(employeeDTO);} catch (AppException e) {log.info("异常信息:{}", e);return JSONResult.failure(ResultCodeEnum.Failure.getCode(), e.getMessage());}return JSONResult.success();}

在Controller控制层进行入参校验时,需要注意的是@Valid 和 BindingResult 是一一对应的,

如果有多个 @Valid,那么每个 @Valid 后面都必须添加一个 BindingResult 对象用来接收Bean中校验返回的消息,
只有@Valid,而没有BindingResult来接受实体Bean校验完成后的消息,按正常情况下Bean中的字段完全校验通过,则不会出现程序错误,否则就会程序报错 “ Validation failed for argument [0]  ”,

修改正确后:

    /*** Description:[通过实体添加新的员工数据]** @param EmployeeDTO [员工实体信息]* @return JSONResult* @date 2021-04-22* @author huazai*/@PostMapping("/addEmployee")@ApiOperation(value = "/addEmployee", notes = "通过实体添加新的员工数据")public JSONResult addEmployee(@Valid @RequestBody @ApiParam(name = "EmployeeDTO", value = "EmployeeDTO 实体类") EmployeeDTO employeeDTO, BindingResult bindingResult ) {try {// 字段校验if (bindingResult.hasErrors()) {return JSONResult.failure(bindingResult);}// 验证员工信息是否重复if (EmployeeService.validateInsertEmployeeRepeat(employeeDTO)) {return JSONResult.failure(ResultCodeEnum.Failure.getCode(), Constant.MESSAGE_REPEAT_VALIDATE);}this.EmployeeService.insertEmployee(employeeDTO);} catch (AppException e) {log.info("异常信息:{}", e);return JSONResult.failure(ResultCodeEnum.Failure.getCode(), e.getMessage());}return JSONResult.success();}

关于这个问题,除了开发人员自身的测试外,还需要测试人员的边界值测试就起到了格外重要的作用咯,如果等到上线后才发现这种问题,那你的体制就真的太弱鸡了!所以我们需要细心!细心!细心!再细心!!!

关于详细Spring Boot的实体字段校验请查看:

【Java实体字段校验,@Valid BindingResult实现接口入参自动检验,Spring Boot中validation.constraints注解详解及快速应用实践】


好了,关于 Validation failed for argument [0] 参数校验失败的解决办法  就写到这儿了,如果还有什么疑问或遇到什么问题欢迎扫码提问,也可以给我留言哦,我会一一详细的解答的。 
歇后语:“ 共同学习,共同进步 ”,也希望大家多多关注CSND的IT社区。


作       者: 华    仔
联系作者: who.seek.me@java98k.vip
来        源: CSDN (Chinese Software Developer Network)
原        文: https://blog.csdn.net/Hello_World_QWP/article/details/116119817
版权声明: 本文为博主原创文章,请在转载时务必注明博文出处!

Validation failed for argument [0] 参数校验失败的解决办法相关推荐

  1. TypeError: expected Tensor as element 0 in argument 0, but got numpy.ndarray解决办法

    TypeError: expected Tensor as element 0 in argument 0, but got numpy.ndarray 问题描述 原因分析: 需要Tensor变量,我 ...

  2. 登录阿里旺旺,提示证书校验失败的解决办法~

    先登录支付宝,查看数字证书是否过期,用支付盾的查看支付盾是否已连接.检查都正常后,还不行,那么按如下方法尝试! 彻底清除IE浏览器的缓存文件!IE9下如下图!注意最后一项,务必选中! 删除后,应该就可 ...

  3. Validation failed for one or more entities. See ‘EntityValidationErrors’解决方法

    Validation failed for one or more entities. See 'EntityValidationErrors'解决方法 参考文章: (1)Validation fai ...

  4. ubuntu18.0.4 不能下载 libgd2-dev(ubuntu 20.04 安装perl 中GD 模块失败的解决办法)

    ubuntu18.0.4 不能下载 libgd2-dev 一.错误信息: Unable to locate package libgd2-dev 二.原因 没有对应源 到 https://packag ...

  5. #Jetson-NX踩坑记--Etcher Flash Failed 烧录失败的解决办法

    #Jetson-NX踩坑记--Etcher Flash Failed 烧录失败的解决办法 问题 解决方案 问题 根据 官方教程 使用 Etcher 烧录 Jetson NX 的镜像文件时总是失败,如图 ...

  6. MySQL服务中断后重启失败及解决办法(个例)

    转载请标明出处^_^ 原文首发于:https://www.zhangruibin.com 本文出自于:RebornChang的博客 MySQL服务中断后重启失败及解决办法(个例) Starting M ...

  7. [UE4]导入 PSD 文件失败的解决办法:输出为 PNG,将 PNG 再保存为 PSD 导入

    导入 PSD 文件失败的解决办法:输出为 PNG,将 PNG 再保存为 PSD 导入 图1 报错弹窗 LogFactory: FactoryCreateFile: Texture with Reimp ...

  8. gradle下载更新依赖库失败的解决办法 - 依赖库下载加速1000%

    gradle下载更新依赖库失败的解决办法 - 依赖库下载加速1000% 现在使用gradle来构建项目的越来越多,通过gradle能更轻松完成项目的依赖以及编译等工作.特别是Google的Androi ...

  9. Contact Form 7邮件发送失败的解决办法

    Contact Form 7邮件发送失败的解决办法 一.contact form 7无法发送邮件的原因 对mail()函数的不支持. Contact Form 7表单提交失败在使用过程中会出现,归根结 ...

最新文章

  1. 扩展用户体验之操作栏ActionBar
  2. 机器学习:多层感知机原理及实现
  3. 3_7 MementoMode 备忘录模式
  4. 腾讯副总裁姚星:腾讯AI Lab将致力打造通往AGI之路
  5. 如何在 Apache Flink 中使用 Python API?
  6. ROMMON下IOS的恢复
  7. iOS开发——UI基础-KVC
  8. 常见排序算法之归并排序
  9. python vba excel课程_Excel办公自动化—VBA 及编程入门指南
  10. 设计一个RC高通滤波器或低通滤波器
  11. 01:电机控制的基本原理
  12. 信息技术智库丨月度大考试
  13. !! A股历史平均市盈率走势图
  14. 2014年Q1-Q3国内创业生态报告:在技术革命的部署阶段,泡沫不是问题
  15. python dbf 修改_Python修改DBF文件指定列
  16. 小米5s升级android9,小米5S lineage16 安卓9.0 极致省电 纯净 完美root Xposed 经典版
  17. 机器学习算法优缺点总结
  18. ls -l 字段意思
  19. 整理:console的用法
  20. liunx c语言制作 微型web服务器 300行代码

热门文章

  1. 删库别急着跑路,这几步神恢复!
  2. TMS320F28xx ADC转换图解
  3. Java swing五种常见的布局方式【转载】
  4. unbuntu 下安装zookeeper
  5. 微信小程序校园小情书
  6. 什么,恩智浦的flash模拟EEP是这么玩的?
  7. java web创意_javaweb有什么能做的项目,最好比较有创意一点
  8. 飞天开放平台编程指南——阿里云计算的实践(双色)
  9. wxpython制作解包工具(三)
  10. debug5x 微信_微信发布 Web 开发者工具 V0.5.0 新增 X5 Blink 内核调试功能