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
相关产品推荐
相关产品推荐

