在做项目时,后端采用上传文件组件MultipartFile时,使用swagger测试文件上传出现了以下问题:

2022-03-24 22:02:07 |ERROR |http-nio-9000-exec-9 |DirectJDKLog.java:175 |org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet] |Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Current request is not a multipart request] with root cause
org.springframework.web.multipart.MultipartException: Current request is not a multipart requestat org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValueInternal(RequestParamMethodArgumentResolver.java:210)at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:193)at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:114)at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)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.doGet(FrameworkServlet.java:898)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:764)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 com.github.xiaoymin.knife4j.spring.filter.ProductionSecurityFilter.doFilter(ProductionSecurityFilter.java:53)at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)at com.github.xiaoymin.knife4j.spring.filter.SecurityBasicAuthFilter.doFilter(SecurityBasicAuthFilter.java:90)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:197)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135)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:357)at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382)at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895)at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1722)at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)at java.lang.Thread.run(Thread.java:748)

接下来我们先进行swagger测试:

可以看到我们文件上传和模块名字都是正确的,但是返回的结果却是500,我们看看服务端哪儿出错了:

定位错误:

org.springframework.web.multipart.MultipartException: Current request is not a multipart request

bug解决方案

我在网上查询了问题的方案:

其中找到了问题的关键:

我们对应是要上传文件,所以前端发起的请求因该是一个上传文件的请求,即content-type的类型应该为multipart/form-data,我们看看swagger发出的请求类型是什么:

从这里可以看出swagger发出的请求contentType是application/json的形式。

我们目前并不知道在前端的情况下如何设置这个contenttype,但是我在网上看到了关于用postman调用成功的方法:

我们在postman中直接设置file和module,不用设置contentType,这样postman会自动帮助我们进行设置。我们进行运行:

运行成功并成功返回了地址。

在浏览器中可以查看请求信息,但是在postman中怎样进行查看呢?

view=>show postman console

这里可以看出,就是因为请求头中contentType是multipart/form-data而不是application/json,所以我们上传文件成功了。但是我并不知道swagger和postman为什么会有这样的区别。

当然,上面只是我们后端在测试时遇到的问题。在实际项目中,文件的上传还是要看前端怎么设计http的头部信息才能正确上传文件。

以上就是oss以及spring文件上传组件的介绍

参考文章:

org.springframework.web.multipart.MultipartException: Current request is not a multipart request

org.springframework.web.multipart.MultipartException: Current request is not a multipart request相关推荐

  1. 解决:org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request;

    项目场景: 微服务修改保存,出现系统异常 问题描述 报错日志如下: | 2022-10-24 11:32:42.882 |-[1;31mERROR[m [http-nio-9000-exec-4] [ ...

  2. 图片上传问题 org.springframework.web.multipart.MultipartException

    背景 测试环境图片上传是正常的,但测试环境异常 [ERROR]{"level":"ERROR","time":"2022-09-2 ...

  3. 普元 AppServer 6.5 将springboot应用部署到应用服务器,上传文件时报错:Caused by: org.springframework.web.multipart.Multipar

    [问题] springboot应用部署到应用服务器后,上传文件时报错: Caused by: org.springframework.web.multipart.MultipartException: ...

  4. Springboot Resolved [org.springframework.web.multipart.support.MissingServletRequestPartException

    Resolved [org.springframework.web.multipart.support.MissingServletRequestPartException: Required req ...

  5. org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nes

    使用springboot上传文件,当文件超过2M报出异常 异常显示org.springframework.web.multipart.MaxUploadSizeExceededException: M ...

  6. Java之——java.lang.NoSuchMethodException: [org.springframework.web.multipart.MultipartFile;.()

    转自:https://blog.csdn.net/l1028386804/article/details/65449355 ava.lang.NoSuchMethodException: [org.s ...

  7. Spring MVC报异常:org.springframework.web.util.NestedServletException: Request processing failed

    Spring MVC报异常:org.springframework.web.util.NestedServletException: Request processing failed 参考文章: ( ...

  8. org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'PUT' not supported

    错误描述: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'PUT' not suppo ...

  9. ajax post请求不走success org.springframework.web.util.NestedServletException: Request processing failed

    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is ...

最新文章

  1. npm 加入 TC39 委员会,参与定制 JavaScript 标准
  2. java9新特性-16-Deprecated的相关API
  3. org.springframework.jdbc.core.JdbcTemplate 无法import原因分析
  4. ps -ef grep java解释,ps -ef | grep java(示例代码)
  5. 分享一个CSS3和jQuery实现的模糊显示效果 - 帮助你的访问用户更好的阅读内容
  6. 一页纸项目管理模板_项目管理职场必备读物!这一次全部送给你!
  7. 清空文件下的SVN控制文件
  8. 【Kafka】Kafka 1.1.0以后版本获取Kafka每个分区最新Offset的几种方法
  9. ads s参数拟合_S参数仿真(ADS)
  10. 让C#语言充当自身脚本!——.NET中的动态编译
  11. 白话阿里巴巴Java开发手册高级篇
  12. 1×pbs缓冲液配方_PBS缓冲液配方.doc
  13. LT8911EXB功能概述 LT8911EXB是MIPI转EDP一般能用于车载,平板,教育电子,广告机,收银机等等
  14. 自主导航小车实践(一)
  15. ES6、ES7、ES8、ES9、ES10新特性一览
  16. ABP实践(5)-abp前端vue框架之IView实现三级菜单(博友需要特此分享)
  17. 面试知识点-网络——HTTP与TLS
  18. 安科瑞Acrel-BUS智能照明控制系统在医院的应用
  19. 010 火狐浏览器插件中,没有Xpath怎么办
  20. 2020起重机司机(限桥式起重机)考试题及起重机司机(限桥式起重机)实操考试视频

热门文章

  1. 最小费用最大流问题详解
  2. 基于SSM村委会工作管理系统
  3. lua中自定义加载lua的path
  4. 线上OOM故障排查——Curator retryPolicy的选择、Jute.maxBuffer的配置
  5. socket学习01(socket函数参数介绍)
  6. eBPF+Ftrace 合璧剑指:no space left on device?
  7. Soui—SListView使用例子
  8. tag面包屑vuex
  9. 箭头函数的适应场景?
  10. 达梦数据库:删除表和清空表