上传文件和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进行JSON和Excel文件转换处理指南

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

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

MySQL 8 中的一个强大功能 JSON_TABLE示例详解

《MySQL8中的一个强大功能JSON_TABLE示例详解》JSON_TABLE是MySQL8中引入的一个强大功能,它允许用户将JSON数据转换为关系表格式,从而可以更方便地在SQL查询中处理J... 目录基本语法示例示例查询解释应用场景不适用场景1. ‌jsON 数据结构过于复杂或动态变化‌2. ‌性能要

Spring的RedisTemplate的json反序列泛型丢失问题解决

《Spring的RedisTemplate的json反序列泛型丢失问题解决》本文主要介绍了SpringRedisTemplate中使用JSON序列化时泛型信息丢失的问题及其提出三种解决方案,可以根据性... 目录背景解决方案方案一方案二方案三总结背景在使用RedisTemplate操作redis时我们针对

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

MySQL查询JSON数组字段包含特定字符串的方法

《MySQL查询JSON数组字段包含特定字符串的方法》在MySQL数据库中,当某个字段存储的是JSON数组,需要查询数组中包含特定字符串的记录时传统的LIKE语句无法直接使用,下面小编就为大家介绍两种... 目录问题背景解决方案对比1. 精确匹配方案(推荐)2. 模糊匹配方案参数化查询示例使用场景建议性能优

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.