天行健,君子以自强不息;地势坤,君子以厚德载物。
每个人都有惰性,但不断学习是好好生活的根本,共勉!
文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。
文章目录
- 1. 背景
- 2. 报错内容
- 2.1 IDEA控制台提示
- 2.2 postman参数
- 2.3 postman报错
- 3. 原因分析
- 4. 解决方法
1. 背景
现在有一个需求是定义一个接口,同时传文件和Java对象
我使用了如下注解:@RequestBody传Java对象,@RequestParam传文件参数
如下接口:
@PostMapping(value = "/createSwTool")
public void createSwTool(@RequestHeader("username") String username, @RequestHeader("userGroup") String userGroup,
@RequestBody TbUserInfo tbUserInfo ,
@RequestParam("files") MultipartFile multipartFile){
然而,在执行时失败
2. 报错内容
2.1 IDEA控制台提示
Resolved [org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'multipart/form-data;boundary=--------------------------680157121409098483748812;charset=UTF-8' not supported]
2.2 postman参数
2.3 postman报错
{
"timestamp": "2024-04-22T06:47:27.128+00:00",
"status": 415,
"error": "Unsupported Media Type",
"path": "/test-script/createSwTool"
}
3. 原因分析
同时使用@RequestBody
和@RequestParam
注解时,@RequestBody
注解的内容是java
类型而不是json
类型时,会遇到这个问题
原因是Java中使用springboot时,这两个注解不能同时使用,@RequestBody
用于接受post请求体中的数据,通常为JSON
或XML
格式的数据
@RequestParam
用于接收查询参数
或者post请求的form-data
当使用两个注解进行请求时,spring无法解析请求体,请求体被@RequestBody
全部占用,此时会抛出Unsupported Media Type
异常
4. 解决方法
同时传参文件和Java对象时,使用@RequestPart替换@RequestBody来传Java对象
即:
@PostMapping(value = "/createSwTool")
public void createSwTool(@RequestHeader("username") String username, @RequestHeader("userGroup") String userGroup,
@RequestPart TbUserInfo tbUserInfo ,
@RequestParam("files") MultipartFile multipartFile){
具体如何使用可以参考文章:
如何在Java接口中定义多种类型的参数(如同时定义Java对象和文件类型参数Multipartfile等)
@RequestBody、@RequestPart和@ReqeustParam的使用场景区别可参考:
@RequestBody、@RequestPart和@ReqeustParam的使用说明
感谢阅读,祝君暴富!