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

Spring Boot中MultipartFile上传报415及Jersey注入异常排查

解决Jersey文件上传的「No injection source found」问题

我帮你梳理下当前遇到的问题并给出针对性解决方案:

问题背景

你最初尝试用Spring的MultipartFile实现文件上传接口时遇到HTTP 415错误;改用Jersey的FormDataParam方案后,又出现了参数注入失败的核心报错:

org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization. [[FATAL] No injection source found for a parameter of type public javax.ws.rs.core.Response com.example.tsi.channel.endpoint.v1.impl.FileUploadController.uploadPicture(java.io.InputStream,org.glassfish.jersey.media.multipart.FormDataContentDisposition) at index 0.

错误原因分析

这个报错本质是Jersey无法识别@FormDataParam注解的参数注入逻辑,主要由两个核心问题导致:

  1. 缺失Jersey Multipart依赖:FormDataParam和MultiPartFeature属于独立的jersey-media-multipart模块,你的依赖树中未包含该模块,导致相关功能无法生效。
  2. 代码细节错误:控制器中存在变量名拼写错误,虽不直接引发注入失败,但会影响后续文件信息的获取。

具体解决方案

1. 添加Jersey Multipart依赖

在你的pom.xml(Maven项目)中添加与当前Jersey版本匹配的依赖:

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-multipart</artifactId>
    <version>2.23.2</version> <!-- 必须与jersey-server版本保持一致 -->
</dependency>

如果是Gradle项目,对应配置为:

implementation 'org.glassfish.jersey.media:jersey-media-multipart:2.23.2'

2. 修正控制器中的拼写错误

你代码里的变量名filFormDataContentDisposition多了一个冗余前缀,修正为:

@FormDataParam("file") FormDataContentDisposition fileFormDataContentDisposition

3. 确保JerseyConfig被Spring正确识别

给JerseyConfig添加@Configuration注解,让Spring将其作为配置类加载:

import org.glassfish.jersey.media.multipart.MultiPartFeature;
import org.glassfish.jersey.server.ResourceConfig;
import org.springframework.context.annotation.Configuration;

@Configuration
public class JerseyConfig extends ResourceConfig {
    public JerseyConfig() {
        register(MultiPartFeature.class);
        register(FileUploadController.class);
    }
}

4. 修正后的完整控制器代码

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

@Path("/media")
@Produces(MediaType.APPLICATION_JSON)
@Component
public class FileUploadController {

    @Path("/upload")
    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public Response uploadPicture(
            @FormDataParam("file") InputStream file,
            @FormDataParam("file") FormDataContentDisposition fileFormDataContentDisposition) {
        
        // 这里可以添加FTP文件上传逻辑
        String fileName = fileFormDataContentDisposition.getFileName();
        System.out.println("接收的文件名:" + fileName);
        
        return Response.ok().build();
    }
}

测试提示

用Postman测试时,确保请求设置正确:

  • 请求方法选择POST
  • 路径填写http://localhost:8030/media/upload
  • 选择form-data格式,键名设置为file,类型选择File并上传测试文件

内容的提问来源于stack exchange,提问作者Sohaib Jamal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:33:29