Spring Endpoint接收文件时出现Unsupported Media Type错误求助
Spring Endpoint接收文件时出现Unsupported Media Type错误求助
兄弟,我之前也踩过这个坑,给你几个实用的排查方向,应该能解决问题:
检查端点的
consumes配置是否完整
你遇到的错误提示里的MIME类型带了;charset=UTF-8,大概率是这个细节没覆盖到。可以把consumes属性同时包含带和不带charset的两种格式,比如:@PostMapping(value = "/your-endpoint", consumes = { "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=UTF-8" })这样就能匹配到请求里的两种Content-Type情况了。
确认请求的发送方式是否正确
- 用Postman测试时,一定要选择
form-data格式,Key类型设为file,然后上传你的docx文件,不要手动修改Content-Type,让Postman自动生成。如果之前手动加过charset参数,记得去掉试试。 - Angular那边上传文件时,别手动设置
Content-Type,直接用FormData让浏览器自动处理,示例代码如下:
手动设置const formData = new FormData(); formData.append('file', yourFileObject); // 如果需要传用户信息,直接append进去就行 formData.append('user', JSON.stringify(userInfo)); // 发送请求时不要额外设置headers this.http.post('/your-endpoint', formData).subscribe(...);multipart/form-data会丢失浏览器自动生成的boundary参数,反而会导致媒体类型不匹配。
- 用Postman测试时,一定要选择
检查Spring的Multipart配置
如果是Spring Boot项目,默认已经开启了Multipart支持,但可以确认下application.properties里的spring.servlet.multipart.enabled是不是设为true;如果是传统Spring MVC项目,需要手动配置MultipartResolverBean:@Bean public CommonsMultipartResolver multipartResolver() { CommonsMultipartResolver resolver = new CommonsMultipartResolver(); resolver.setMaxUploadSize(5 * 1024 * 1024); // 可根据需求调整上传大小限制 return resolver; }核对端点的参数定义
接收文件一定要用MultipartFile类型,同时如果还要接收用户信息,推荐用@RequestPart注解而不是@RequestParam,示例代码:public ResponseEntity<String> handleUpload( @RequestPart("file") MultipartFile file, @RequestPart("user") User user ) { // 你的业务处理逻辑 return ResponseEntity.ok("文件接收成功"); }
备注:内容来源于stack exchange,提问作者merman
相关产品推荐
相关产品推荐

