当前位置: 首页 > 知识库问答 >
问题:

Spring Boot 2.x 报告 java.lang.IllegalStateException: 由于未提供多部件配置,无法处理部件

钱朝明
2023-03-14

我注意到这里的多部分请求有一个奇怪的问题。

下面是Spring Boot 2.4.2中使用的球衣2实现:

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces({MediaType.MULTIPART_FORM_DATA, MediaType.APPLICATION_JSON})
public void upload(@FormDataParam("params") MyPojo req,
        @FormDataParam("file") FormDataBodyPart file, @Context HttpHeaders headers, @Suspended AsyncResponse ar)
{
    ...
}

并遵循 Spring Boot 依赖项:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jersey</artifactId>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-multipart</artifactId>
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
</dependency>

我能够使用Postman成功上传JSON和文件(作为多部分/表单数据),但是来自Java客户端的相同请求抛出以下错误:

Caused by: org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided

这篇关于SO的文章说我们需要添加一个< code > CommonsMultipartResolver ,但是为什么它在Postman客户端上运行良好呢??

感谢任何提示或建议,谢谢。

更新Java Apache客户端代码:

        final Document document = getDocument(documentId);
        final String requestParams = getRequestParams(document);
        final String documentContentType = document.getContentType();
        final URL endpoint = getServiceEndpoint();
        
        final MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create().addTextBody(REQUEST_PARAMS_PARAMETER_NAME, requestParams, ContentType.APPLICATION_JSON);
        if (isSendDocument() && documentFile != null) {
            entityBuilder.addBinaryBody(DOCUMENT_CONTENT_PARAMETER_NAME, documentFile, ContentType.parse(documentContentType), document.getContentType());
        }
        
        final HttpEntity reqestEntity = entityBuilder.build();
        connection = (HttpURLConnection)endpoint.openConnection();
        connection.setAllowUserInteraction(false);
        connection.setConnectTimeout(getConnectionTimeout());
        connection.setReadTimeout(getReadTimeout());
        connection.setUseCaches(false);
        connection.setDoOutput(true);
        connection.setRequestMethod("POST");
        connection.addRequestProperty(X_REQUESTED_WITH_HEADER_NAME, "XMLHttpRequest");
        connection.addRequestProperty(X_REQUESTED_BY_HEADER_NAME, "XMLHttpRequest");
        connection.addRequestProperty(ACCEPT_HEADER_NAME, ContentType.APPLICATION_JSON.getMimeType());
        connection.addRequestProperty(CONTENT_TYPE_HEADER_NAME, reqestEntity.getContentType().getValue());
        outStream = connection.getOutputStream();
        reqestEntity.writeTo(outStream);
        outStream.flush();

共有1个答案

常温文
2023-03-14

由于我们打算由泽西servlet处理多部分,@PaulSamsotha建议禁用Spring Boot的多部分处理spring.servlet.multipart.enabled=false解决了问题中发布的原始问题-"java.lang.IllegalStateException:无法处理零件,因为没有提供多部分配置"。

后来,我只在Apache客户端上收到一个Http 400错误,这是由于格式错误的JSON有效负载。感谢所有的支持。

 类似资料:
  • 我想使用火花从html表单上传文件。以下是我的java函数来处理帖子路由: 以下是超文本标记语言形式: 当我上传文件时,我收到500:内部服务器错误,具有以下堆栈跟踪: 遵循以下问题,但答案不起作用:SparkJava:上传文件在Spark java框架中不起作用 我正在使用eclipse IDE和tomcat服务器。 请帮我解决这个问题。

  • 因此,我是Spring的新手,我正在尝试让文件上传为我的项目工作(顺便说一句,我正在使用Spring工具套件),提交表单时,我得到的只是: HTTP状态500-无法解析多部分servlet请求;嵌套异常为java。lang.IllegalStateException:无法处理部件,因为未提供多部件配置 从浏览器堆栈跟踪: 这是jsp中的表单标记: 输入部分: 照片存储在此字段中的艺术家对象: 控制

  • 我写了一个简单的控制器来上传文件: 注释是: 我的ContextCOnfiguration类是: 已更新 文件: -已更新- 当执行post请求(使用postman)时,我得到: 我已经在stackoverflow上查看了一些类似的问题,但没有一个答案对我有帮助。 Spring版本为:4.0.4 任何帮助将不胜感激(当然要竖起大拇指)。 谢谢

  • 我有一个工作的Spring-boot mvc应用程序,我正在尝试集成文件上传选项。根据手册,我配置了以下模板: /src/main/resource/templates/file upload . html 当我登录,然后调用http:/ 127.0.0.5:8080 /上传表单显示时,但当我点击提交按钮时,我得到了。错误消息 HTTP状态403-在请求参数“_csrf”或标头“X-CSRF-TO

  • 问题内容: 我当然缺少有关喷油器的一些基本知识,但是我无法理解为什么 还有这个 按预期工作,而这 会抛出 错误:[$ injector:unpr]未知提供程序:$ provideProvider <-$ provide 如下所述,与提供者有一些特殊的关系,而与实例打交道时,我不确定使块如此特别的东西。 结果,是否没有办法到达外部块,例如,使用(尽管似乎也获得了提供者实例)? 除了好奇心外,这个问题

  • 使用在嵌套目录中部署带有处理程序的lambda时遇到问题。 我执行以下步骤: > 包装: sam包——模板。yaml——打包的输出模板文件。yaml--s3铲斗 创建我在下一步中使用的packaged.yaml。 部署: AWS部署模板文件 /Users/localuser/Do/learn-sam/dynamo-stream-lambda/packaged.yaml 错误 云信息/SAM模板 目