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

使用Jersey Servlet上传文件时遭遇HTTP 415错误求助

看来你踩了Jersey Multipart配置的经典坑了!这个HTTP 415和找不到org.glassfish.jersey.media.multipart.FormDataContentDisposition消息体读取器的错误,90%以上都是因为Multipart的依赖没加对或者Feature没注册导致的,我给你一步步捋清楚解决办法:

1. 确认Multipart依赖已正确添加

首先要确保你的项目里引入了Jersey Multipart的扩展包,而且版本必须和你使用的Jersey核心版本完全一致(版本不匹配是常见的隐形坑):

  • 如果用Maven,在pom.xml里添加:
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-multipart</artifactId>
    <version>你的Jersey核心版本号</version>
</dependency>
  • 如果用Gradle,在build.gradle里添加:
implementation 'org.glassfish.jersey.media:jersey-media-multipart:你的Jersey核心版本号'

2. 注册MultipartFeature到Jersey配置

光加依赖还不够,必须让Jersey知道要启用Multipart功能,这一步很容易忘:

  • 如果用Java代码配置Jersey:
    在你的Application子类里注册MultipartFeature:
import org.glassfish.jersey.media.multipart.MultipartFeature;
import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;

public class JerseyAppConfig extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> classes = new HashSet<>();
        // 必须注册这个Feature
        classes.add(MultipartFeature.class);
        // 加上你自己的文件上传资源类
        classes.add(YourUploadResource.class);
        return classes;
    }
}
  • 如果用web.xml配置Jersey:
    在Servlet的初始化参数里添加MultipartFeature的全类名:
<servlet>
    <servlet-name>JerseyServlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.classnames</param-name>
        <param-value>
            org.glassfish.jersey.media.multipart.MultipartFeature,
            com.yourpackage.YourUploadResource
        </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

3. 检查资源方法的参数配置

确保你的文件上传接口参数注解正确,特别是@FormDataParam的参数名要和前端表单的name属性完全匹配:

import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Consumes;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.glassfish.jersey.media.multipart.FormDataParam;
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
import java.io.InputStream;

@Path("/upload")
public class YourUploadResource {
    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response uploadFile(
        @FormDataParam("file") InputStream fileStream,
        @FormDataParam("file") FormDataContentDisposition fileDisposition) {
        
        // 这里写你的文件处理逻辑,比如保存到服务器
        String fileName = fileDisposition.getFileName();
        // ...
        
        return Response.ok("文件 " + fileName + " 上传成功").build();
    }
}

对应的前端test.html里的表单也要确保enctype设置正确:

<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <button type="submit">上传文件</button>
</form>

4. 排除版本兼容性问题

如果你之前用的是Jersey 1.x的老依赖(比如com.sun.jersey开头的包),现在切换到2.x的话,一定要彻底替换成org.glassfish.jersey下的包,两者完全不兼容,混用必然会出现这类找不到类的错误。

按照上面的步骤排查一遍,基本就能解决这个问题了!

内容的提问来源于stack exchange,提问作者Andy Mummau

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:28:25