上传带图片的产品时触发HttpMediaTypeNotSupportedException异常求助
问题排查与解决方案
核心原因
这个异常是因为Spring MVC无法处理application/octet-stream类型的请求内容,通常和文件上传时的请求格式、接口参数配置不匹配有关。
具体排查步骤
修正控制器接口配置
确保上传接口的@PostMapping指定正确的消费类型,并且参数绑定符合multipart请求要求:@PostMapping(value = "/products", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public ResponseEntity<?> addProduct(@ModelAttribute Product product, @RequestParam("image") MultipartFile image) throws IOException { // 服务层处理:将MultipartFile转为byte[]存入product product.setImage(image.getBytes()); productService.saveProduct(product); return ResponseEntity.ok("产品上传成功"); }注意:不要用
@RequestBody接收实体,multipart/form-data请求无法通过@RequestBody解析。调整Postman请求方式
- 选择
POST请求,输入接口URL - 切换到
Body标签,选择form-data格式 - 添加产品的普通字段(如
name、price等,参数名要和实体类属性一致) - 添加文件字段,参数名对应控制器里的
@RequestParam参数名(比如image),类型选择File,然后选择本地图片文件 - 不要手动设置Content-Type请求头,Postman会自动生成包含
boundary的multipart/form-data请求头,手动设置会导致解析失败
- 选择
检查实体类配置
如果实体类中存储图片的字段是byte[]类型,确保添加JPA的@Lob注解支持大字段存储;不要在实体类中直接用MultipartFile作为属性,它是Spring上传专用类型,无法直接序列化或持久化。确认Spring Boot自动配置
Spring Boot默认已自动配置StandardServletMultipartResolver,无需额外配置,除非自定义了Multipart相关配置导致冲突。可检查application.yml/application.properties中的spring.servlet.multipart配置项,确保max-file-size、max-request-size等参数合理。
内容的提问来源于stack exchange,提问作者ClowdHawk
相关产品推荐
相关产品推荐

