🤟致敬读者

  • 🟩感谢阅读
  • 🟦希望我的文章能帮到您
  • 🟪如有兴趣可点关注了解更多内容

📘博主信息

  • 👆点标题有惊喜

📃文章前言

  • 🔷文章均为学习和工作中整理的笔记,分享记录为主,如有错误请指正,共同学习进步。
  • 🔶本文主要介绍Unsupported Media Type报错相关内容


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请求体中的数据,通常为JSONXML格式的数据
@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的使用说明


📜文末寄语

  • 🟢茫茫人海,相识即是有缘
  • 🟠拥抱科技,学习永无止步
  • 🔵创作不易,分享永不设限
  • 🟣如有收获,望君一键三连


📕版权声明:

  • 🩵作者:为好全栈
  • 💛博客地址:https://hanshan.blog.csdn.net/
  • 💚版权:本作品采用《创作共享许可证》进行许可,根据该许可授权的内容可在符合本许可证条款的前提下自由使用、修改和创作衍生作品。

📗版权许可介绍:

  • 💙本文采用CC BY-NC-SA许可证
  • 🧡此许可允许在使用者仅出于非商业目的以任何媒体或格式分发、重新混合、改编和构建材料,并且前提是注明创作者。
  • 💜如果您重新混合、改编或基于该材料进行构建,则必须按照相同的条款对修改后的材料进行许可。

📙更多版权信息请访问以下网址查看:


Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐