You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jersey POST API未携带Content-Length时无法工作求助

解决Jersey POST API无Content-Length头时的Multipart处理异常

首先,你遇到的java.lang.IllegalStateException: Unable to process parts as no multi-part configuration has been provided异常,核心原因是:当请求不携带Content-Length头时,Tomcat会尝试使用Servlet 3.0的原生multipart处理机制,但你的应用缺少对应的multipart配置,导致无法正确解析分块传输的请求体。下面是具体的解决步骤:

1. 配置Servlet的Multipart支持

Tomcat处理chunked编码(无Content-Length)的multipart请求时,必须明确配置multipart解析规则。你可以通过两种方式配置:

方式一:Spring Boot项目配置

在自定义的DispatcherServlet Bean中添加multipart配置:

@Configuration
public class ServletConfig {
    @Bean
    public DispatcherServlet dispatcherServlet() {
        DispatcherServlet servlet = new DispatcherServlet();
        // 设置multipart参数:临时路径、单文件大小、总请求大小等
        servlet.setMultipartConfig(new MultipartConfigElement(
                null,
                52428800, // 单个文件最大50MB
                52428800, // 请求总大小最大50MB
                0
        ));
        return servlet;
    }
}

方式二:传统web.xml配置

如果是非Spring Boot项目,在web.xml中给DispatcherServlet添加multipart配置:

<servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <multipart-config>
        <max-file-size>52428800</max-file-size>
        <max-request-size>52428800</max-request-size>
    </multipart-config>
</servlet>

2. 确保引入Jersey Multipart依赖

你的接口使用了@FormDataParam,必须引入Jersey的multipart处理依赖。如果用Maven,在pom.xml中添加:

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-multipart</artifactId>
    <version>你的Jersey对应版本</version>
</dependency>

3. 注册Jersey的MultipartFeature

在Jersey的配置类中,必须注册MultipartFeature,让Jersey接管multipart请求的解析,而不是依赖Tomcat的原生处理:

@Configuration
public class JerseyConfig extends ResourceConfig {
    public JerseyConfig() {
        register(FileUpload.class);
        register(MultipartFeature.class); // 关键:注册multipart处理Feature
        // 其他接口或Feature注册...
    }
}

补充说明:为什么带Content-Length时正常?

当请求携带Content-Length头时,Tomcat可以直接读取指定长度的完整请求体,Jersey的multipart解析器能直接处理;但当没有该头时,请求会以chunked编码分块传输,此时Tomcat需要依赖预先配置好的multipart解析规则来处理分块数据,缺失配置就会抛出异常。

内容的提问来源于stack exchange,提问作者Jayesh Dhandha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:46:20