上传文件和JSON时 @RequestBody和Multipart不能同时存在的解决办法

2024-06-13 19:08

本文主要是介绍上传文件和JSON时 @RequestBody和Multipart不能同时存在的解决办法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这两天有这么一个需求,有一个接口,会同时上传JSON和文件,众所周知,SpringBoot里的参数接收JSON的时候可以在参数前加@RequestBody将JSON映射成我们需要的对象或者MAP等类型

举个栗子
image.png
像图上所示,在参数map前加上@requestBody即可将数据映射成Map,这时候如果需要在上传JSON的同时上传文件呢?目前我发现的是有两种解决方案

  1. 第一种就是将数据格式改为String,然后在参数前加@RequestParam,收到参数后在方法里面通过JSON对象强转为我们所需要的类型,具体参考我之前写的一篇文章
  2. 上面这种方式即可应对一般的需求,但是如果说需求比较特殊,比如说我现在遇到的,接口可能会收到JSON数据,这时我们可以通过@RequestBody接收,但也可能会收到文件加JSON数据的形式,既然@RequestBody不能和Multipart同时用,那我们需要怎么办呢?
    这时候第二种方法就上线了,我们可以将参数修改为HttpServletRequest,通过HttpServletRequest来获取参数,再举个栗子
    image.png
    (Utils.read是工具类里的方法,内容如下)
public static String read(Reader reader) {if (reader == null) {return null;} else {try {StringWriter writer = new StringWriter();char[] buffer = new char[4096];boolean var3 = false;int n;while(-1 != (n = reader.read(buffer))) {writer.write(buffer, 0, n);}return writer.toString();} catch (IOException var4) {throw new IllegalStateException("read error", var4);}}}

如图所示,我们使用了HttpServletRequest来接收参数,首先我们先获取param参数,如果参数为空,说明是以Body形式提交的数据,所以我们获取一下body的数据,最后强制转换成我们需要的类型,如果param不为空的时候,我们就要获取文件了
image.png
通过HttpServletRequest获取文件的代码如下,这样我们就实现了一个接口既可以接收JSON类型,也可以接收文件+JSON类型的功能了。

MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
MultipartFile file = multipartRequest.getFile("file");

PS:刚开始写博客,语言组织能力实在是有点差劲,如果你也遇到类似的问题并在看完我写的博客后仍无法解决,请留言,我会在第一时间回复与你一起解决问题。

这篇关于上传文件和JSON时 @RequestBody和Multipart不能同时存在的解决办法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1058170

相关文章

JSON字符串转成java的Map对象详细步骤

《JSON字符串转成java的Map对象详细步骤》:本文主要介绍如何将JSON字符串转换为Java对象的步骤,包括定义Element类、使用Jackson库解析JSON和添加依赖,文中通过代码介绍... 目录步骤 1: 定义 Element 类步骤 2: 使用 Jackson 库解析 jsON步骤 3: 添

IDEA如何将String类型转json格式

《IDEA如何将String类型转json格式》在Java中,字符串字面量中的转义字符会被自动转换,但通过网络获取的字符串可能不会自动转换,为了解决IDEA无法识别JSON字符串的问题,可以在本地对字... 目录问题描述问题原因解决方案总结问题描述最近做项目需要使用Ai生成json,可生成String类型

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

Python中json文件和jsonl文件的区别小结

《Python中json文件和jsonl文件的区别小结》本文主要介绍了JSON和JSONL两种文件格式的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下... 众所周知,jsON 文件是使用php JSON(JavaScripythonpt Object No

Java文件上传的多种实现方式

《Java文件上传的多种实现方式》文章主要介绍了文件上传接收接口的使用方法,包括获取文件信息、创建文件夹、保存文件到本地的两种方法,以及如何使用Postman进行接口调用... 目录Java文件上传的多方式1.文件上传接收文件接口2.接口主要内容部分3.postman接口调用总结Java文件上传的多方式1

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

python 字典d[k]中key不存在的解决方案

《python字典d[k]中key不存在的解决方案》本文主要介绍了在Python中处理字典键不存在时获取默认值的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录defaultdict:处理找不到的键的一个选择特殊方法__missing__有时候为了方便起见,

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

SQL Server数据库磁盘满了的解决办法

《SQLServer数据库磁盘满了的解决办法》系统再正常运行,我还在操作中,突然发现接口报错,后续所有接口都报错了,一查日志发现说是数据库磁盘满了,所以本文记录了SQLServer数据库磁盘满了的解... 目录问题解决方法删除数据库日志设置数据库日志大小问题今http://www.chinasem.cn天发

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11