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

Spring Boot 1.5.6无法接收PostMan上传文件,换String类型可正常返回

问题分析与解决方案

核心问题是Spring MVC注解与JAX-RS注解混用:你在代码中同时使用了Spring MVC的@RestController、@RequestParam,以及JAX-RS的@Path、@POST、@Consumes等注解,导致Spring MVC的Multipart文件解析逻辑未被触发,而JAX-RS的参数解析仅能处理普通字符串类型,因此出现换String就正常、用MultipartFile返回404的现象。

以下是两种解决思路:


方案一:统一使用Spring MVC注解(推荐)

完全改用Spring MVC的注解体系,让Spring的MultipartResolver正常工作:

@RestController
@RequestMapping("/UploadFile")
public class UploadFileRsource {
    @Autowired 
    private AmazonS3Service amazonS3Service;

    @PostMapping(
        value = "/DrugProcessStepUpload",
        produces = MediaType.APPLICATION_JSON_VALUE,
        consumes = MediaType.MULTIPART_FORM_DATA_VALUE
    )
    public String drugProcessStepUpload(@RequestParam("file") MultipartFile file) throws Exception {
        TransportUtil transportUtil = new TransportUtil();
        return transportUtil.genWebServiceReturnJsonString();
    }
}

同时可在application.properties中配置Multipart参数(可选,默认已启用):

spring.http.multipart.enabled=true
spring.http.multipart.max-file-size=10MB
spring.http.multipart.max-request-size=10MB

方案二:如果必须使用JAX-RS(Jersey)

若项目依赖JAX-RS框架,需改用JAX-RS的文件接收方式,并确保引入Multipart依赖:

1. 引入Jersey Multipart依赖(Maven)

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-multipart</artifactId>
    <version>2.25.1</version> <!-- 适配Spring Boot 1.5.x版本 -->
</dependency>

2. 修改Controller代码

使用JAX-RS的@FormDataParam接收文件:

@Path("/UploadFile")
public class UploadFileRsource {
    @Autowired 
    private AmazonS3Service amazonS3Service;

    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    @Path("/DrugProcessStepUpload")
    public String drugProcessStepUpload(
        @FormDataParam("file") InputStream fileStream,
        @FormDataParam("file") FormDataContentDisposition fileMeta
    ) throws Exception {
        // 可将InputStream转换为MultipartFile或直接处理文件流
        TransportUtil transportUtil = new TransportUtil();
        return transportUtil.genWebServiceReturnJsonString();
    }
}

3. 注册Jersey MultipartFeature

在Jersey配置类中注册Multipart支持:

@Component
public class JerseyConfig extends ResourceConfig {
    public JerseyConfig() {
        register(UploadFileRsource.class);
        register(MultiPartFeature.class);
    }
}

内容的提问来源于stack exchange,提问作者Jin Lin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 08:27:20