简体   繁体   English

如何在 Spring-boot 2.x 中一起发送 MultiPart 和 RequestBody

[英]How to send MultiPart and RequestBody together In Spring-boot 2.x

I'm implementing microservices in Spring-boot.我在 Spring-boot 中实现微服务。 I try to send @RequestBody with a MultipartFile together.我尝试将@RequestBodyMultipartFile一起发送。 I refereed some questions in stackoverflow, but nothing helps me.我在stackoverflow中提出了一些问题,但没有任何帮助。

Video class视频 class

@Data
public class Video{

    @id
    ObjectId _id;
    private String title;
    private String description;
    List<String> tags;
}

Method方法

@PostMapping(RequestUrl.VIDEO_ADD_VIDEO)
public ResponseEntity<BulkWriteResult> addNewVideoToCategory(
    @RequestBody Video video
    @RequestPart MultipartFile file) {
    // some logics

}

In application.properties在 application.properties

spring.servlet.multipart.enabled=true 
spring.servlet.multipart.maxFileSize=1000000KB
spring.servlet.multipart.maxRequestSize=1000000KB

The error Im getting is,我得到的错误是,

  "timestamp": "2020-04-21T12:15:37.592+00:00",
  "status": 415,
  "error": "Unsupported Media Type",
  "message": "Content type 'multipart/form-data;boundary=----WebKitFormBoundarydksa0TRBbc8VmBzU;charset=UTF-8' not supported",
  "trace": "org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=----WebKitFormBoundarydksa0TRBbc8VmBzU;charset=UTF-8' not supported\r\n\tat org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:225)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:158)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:131)\r\n\tat org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:121)\r\n\tat org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:167)\r\n\tat org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:134)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879)\r\n\tat org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793)\r\n\tat org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)\r\n\tat org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)\r\n\tat org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)\r\n\tat org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:660)\r\n\tat org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)\r\n\tat javax.servlet.http.HttpServlet.service(HttpServlet.java:741)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)\r\n\tat org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n\tat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n\tat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)\r\n\tat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)\r\n\tat org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)\r\n\tat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)\r\n\tat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n\tat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n\tat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)\r\n\tat org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)\r\n\tat org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)\r\n\tat org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)\r\n\tat org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1594)\r\n\tat org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)\r\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)\r\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n\tat java.base/java.lang.Thread.run(Thread.java:832)\r\n",
  "path": "/video/add-video"
}

But I wonder, the multipart file ( @RequestPart ) is working with @RequestParam if I send all fields as params.但我想知道,如果我将所有字段作为参数发送,那么多部分文件( @RequestPart )正在与@RequestParam一起使用。

After referring some questions, I added在参考了一些问题后,我补充说

@Bean
    public MultipartResolver multipartResolver() {        
        return new StandardServletMultipartResolver();
    }

But no luck.但没有运气。 I tried to send the Video Object as Request Part also, since no luck.我也尝试将视频 Object作为请求部分发送,因为没有运气。 Thanks in advance.提前致谢。

Update 1.更新 1。

Just tried to use both as @RequestPart and attached how I requested as screenshot只是尝试将两者都用作@RequestPart并附上我的请求方式作为屏幕截图

@PostMapping(RequestUrl.VIDEO_ADD_VIDEO)
public ResponseEntity<BulkWriteResult> addNewVideoToCategory(
    @RequestPart("body") Video video
    @RequestPart("file") MultipartFile file) {      

}

邮差

Default headers默认标题标题

Error is Content type 'application/octet-stream' not supported错误是Content type 'application/octet-stream' not supported

Define body as RequestPart too.也将 body 定义为RequestPart

@PostMapping(RequestUrl.VIDEO_ADD_VIDEO)
public ResponseEntity<BulkWriteResult> addNewVideoToCategory(
    @RequestPart("body") Video video
    @RequestPart("file") MultipartFile file) {
    // some logics

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 我们可以在 spring 中同时使用 multipart 和 @RequestBody 吗? - Can we use multipart and @RequestBody together in spring? Spring Boot发送RequestBody和RequestParam - Spring boot send RequestBody and RequestParam 如何在Spring 2.x中将结果发送回 - how send result back in Spring 2.x 如何运行gulp任务和spring-boot:与maven一起运行? - How to run gulp task and spring-boot:run together with maven? @Requestbody没有得到我的JSON对象Spring-Boot - @Requestbody is not Getting my JSON object Spring-Boot 为什么 HATEOAS 在使用 Swagger 2.x 启动期间开始为 spring-boot 版本 &gt;= 2.2.x 创建问题? - Why HATEOAS starts creating issue for spring-boot version >= 2.2.x during startup with Swagger 2.x? 如何将请求发送到后端 spring rest controller 与 Z466DEEC76ECDF324554 请求文件正文和请求 param - How to send request to backend spring rest controller with a json requestbody and request param as a multipart image file 如何配置spring-boot以通过sendGrid发送电子邮件? - How to configure spring-boot to send email via sendGrid? 如何迁移将AbstractMvcEndpoint扩展到Spring Boot 2.x的执行器? - How migrate an actuator that extends AbstractMvcEndpoint to Spring Boot 2.x? 如何使用 spring boot 2.x 为 redis 集群设置密码 - How to set password for redis cluster with spring boot 2.x
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM