上传文件和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

相关文章

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

javacv依赖太大导致jar包也大的解决办法

《javacv依赖太大导致jar包也大的解决办法》随着项目的复杂度和依赖关系的增加,打包后的JAR包可能会变得很大,:本文主要介绍javacv依赖太大导致jar包也大的解决办法,文中通过代码介绍的... 目录前言1.检查依赖2.更改依赖3.检查副依赖总结 前言最近在写项目时,用到了Javacv里的获取视频

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化

Python中Json和其他类型相互转换的实现示例

《Python中Json和其他类型相互转换的实现示例》本文介绍了在Python中使用json模块实现json数据与dict、object之间的高效转换,包括loads(),load(),dumps()... 项目中经常会用到json格式转为object对象、dict字典格式等。在此做个记录,方便后续用到该方

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON: