Java同时使用@RequestBody和@RequestParam传参在postman中执行请求报错:Unsupported Media Type

news/2024/10/11 13:29:01/

天行健,君子以自强不息;地势坤,君子以厚德载物。


每个人都有惰性,但不断学习是好好生活的根本,共勉!


文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。

文章目录

  • 1. 背景
  • 2. 报错内容
  • 3. 原因分析
  • 4. 解决方法


1. 背景

现在有一个需求是定义一个接口,同时传文件和Java对象
我使用了如下注解:@RequestBody传Java对象,@RequestParam传文件参数
如下接口

java">    @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]

postman_29">2.2 postman参数

在这里插入图片描述

在这里插入图片描述

postman_34">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对象
即:

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的使用说明


感谢阅读,祝君暴富!


http://www.ppmy.cn/news/1446033.html

相关文章

Nginx 搭建Web服务

题目: 1.web服务器的主机ip:192.168.78.128 2.web服务器的默认访问目录为/var/www/html 默认发布内容为default‘s page 3.站点news.timinglee.org默认发布目录 为/var/www/virtual/timinglee.org/news 默认发布内容为 news.timinglee.org 4.站点login.t…

Llama images - 记录我看到的那些羊驼

来自 : DREAM: Distributed RAG Experimentation Framework

基于Java-jsp的现代数字化城市公交查询系统论文(四)

⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️⬇️ ➡️点击免费下载全套资料:源码、数据库、部署教程、论文、答辩ppt一条龙服务 ➡️有部署问题可私信联系 ⬆️⬆️⬆️​​​​​​​⬆️…

Python搭建http下载服务器

import http.server import socketserverPORT 8002Handler http.server.SimpleHTTPRequestHandlerwith socketserver.TCPServer(("", PORT), Handler) as httpd:print("serving at port", PORT)httpd.serve_forever()使用: 保存为httpserver.…

嵌入式MCU和SOC的区别?

你大概率并不知晓嵌入式 MCU 与 SOC 之间的区别吧?从表面上来看,MCU 指代的是嵌入式微控制器,而 SOC 则代表着片上系统,这仿佛仅仅是嵌入式系统的不同称谓罢了。然而,在实际的研发以及产品设计过程中,你将会…

Qt下载地址与版本选择指南

为了方便下载Qt不迷路,也为了大家选择适合自己的Qt版本,特此列举一下常用的版本和下载地址。 目前本人常用5.12.12版本。 Qt4的最后一个版本:4.8.7 下载地址 最稳定最经典的版本,如果是qt4的其他版本,强烈升级到次版…

react的参数值和Vue的参数值有什么区别

React和Vue在参数值的处理上存在一些区别,这主要体现在它们的设计理念和语法上。 在Vue中,参数值主要涉及到组件的定义、使用和传递过程。Vue允许通过传递参数来向组件传递数据、事件和样式等信息,从而实现组件的复用和灵活性。Vue的参数通常…

Java核心技术.卷I-上-笔记

目录 面向对象程序设计 使用命令行工具简单的编译源码 数据类型 StringBuilder 数组 对象与类 理解方法调用 继承 代理 异常 断言 日志 面向对象程序设计 面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分从根本上…