SpringBoot 接受文件和对象

2023-11-19

SpringBoot 接受文件和对象

使用场景:某个接口,需要同时接受文件和实体,也就是参数

一、这个时候,前端就不能`json`格式传送数据了,要用到`multipart/form-data;`这种格式传送数据。
二、那么,这个时候,后端应该怎样接受这个参数和文件呢?
1.接受`HttpServletRequest`,自己处理request(不推荐)
2.接受实体,将文件放到对象属性中(推荐)
3.接受参数,将文件放到接受参数中
        这种方法适合接受单个文件参数,多参数还是建议用对象接受,方便扩展
4.一个坑,使用第二种方法的时候,一定不要加`@RequestBody `,加了这个注解,就会报如下错误。
所以,接受文件,不要使用`@RequestBody `注解。但是`@Validated`注解(校验参数的注解)是可以使用的。

一、这个时候,前端就不能json格式传送数据了,要用到multipart/form-data;这种格式传送数据。

二、那么,这个时候,后端应该怎样接受这个参数和文件呢?

1.接受HttpServletRequest,自己处理request(不推荐)

@PostMapping(value = "/upload")    
@ResponseBody    
public String handleFileUpload(HttpServletRequest request) {    
MultipartHttpServletRequest params=((MultipartHttpServletRequest) request);  
// 获取文件
List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");   
// 获取参数
String name=params.getParameter("name");  

2.接受实体,将文件放到对象属性中(推荐)

在这里不能加@RequestBody 或@RequestParam,目前暂不清楚原因。
public class UserFileReq {
	// 参数
    private String username;
    // 文件
    private MultipartFile file;
    // 省略get\set
}

@PostMapping(value = "/upload")    
@ResponseBody    
public String handleFileUpload(UserFileReq req) {    
// 文件和参数 都在实体中了
}

3.接受参数,将文件放到接受参数中
这种方法适合接受单个文件参数,多参数还是建议用对象接受,方便扩展

@PostMapping(value = "/upload")    
@ResponseBody    
public String handleFileUpload(MultipartFile file) {    
}

4.一个坑,使用第二种方法的时候,一定不要加@RequestBody,加了这个注解,就会报如下错误。

{
 "timestamp": 1571196217195,
 "status": 415,
 "error": "Unsupported Media Type",
 "exception": "org.springframework.web.HttpMediaTypeNotSupportedException",
 "message": "Content type 'multipart/form-data;boundary=2gOOYeFBpE;charset=UTF-8' not supported",
 "path": "/file/upload"
}

所以,接受文件,不要使用@RequestBody注解
但是@Validated注解(校验参数的注解)是可以使用的。
————————————————
版权声明:本文为CSDN博主「LitongZero」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/LitongZero/article/details/102583161

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot 接受文件和对象 的相关文章

  • Glassfish:在部署期间修改 EAR 的部署描述符

    经过几天的搜索 尝试和摇头 我将这个问题发布到 SO 尽管它seems已经得到答复 这是场景 我有一个 EAR 应用程序 目前 包含一个 WAR 和一个 EJB 模块 EJB 模块使用 JPA persistence xml 并且一些无状态
  • Java Spark DataFrameReader java.lang.NegativeArraySizeException

    学习 Spark for java 并尝试阅读 csv文件为DataFrame使用DataFrameReader 甚至不能得到一个超级简单的 csv文件工作 因为我不断收到异常java lang NegativeArraySizeExcep
  • 从字符串生成密钥?

    我需要从字符串生成一个密钥 以便我始终可以从同一字符串创建相同的密钥 具体来说是一个Key对象 这样我就可以用它来创建Cipher进而创建SealedObject 这在 Java 中可行吗 我应该考虑什么类 方法组合才能做到这一点 对于 A
  • AffineTransform.rotate() - 如何同时缩放、旋转和缩放?

    我有以下代码 它可以完成我想要绘制一个上面有一些棋子的棋盘的 第一部分 Image pieceImage getImage currentPiece int pieceHeight pieceImage getHeight null dou
  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 我需要一个字数统计程序[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我需要弄清
  • 在java中将DataURL图像转换为图像文件

    我在我的 java servlet 中接收图像 DataURL 它看起来像 data image jpeg base64 9j 4AAQSkZJRgABAQAAAQABAA 我需要将其另存为图像文件 我该怎么做 The simplest w
  • 如何导入 Java 密钥库中现有的 X.509 证书和私钥以在 SSL 中使用?

    我在 ActiveMQ 配置中有这个
  • 如何使用 Selenium 中的索引切换到窗口

    由于selenium不提供切换到窗口 多个窗口 的方法 但我想使用index html自定义方法来切换到不同的窗口 但下面的代码没有按预期工作 请建议以下方法的最佳实施 public void switchToWindowIndex int
  • 如何在 JdbcTemplate 中创建 mySQL 存储过程

    背景 为了解决 MySql 中某些语句只允许在存储过程中出现的问题 我尝试在 JdbcTemplate 提交的 sql 中创建 运行然后删除存储过程 一个简单的例子是 这恰好是在 Spring Boot 中 Service public c
  • 使用 Box2d(适用于 Android)进行碰撞检测?

    有人可以解释一下使用 box2d for android 进行碰撞检测的工作原理吗 我无法理解 BBContactListener 以什么方式工作 BBContactListener listener new BBContactListen
  • Java 不可变对象 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在学习不变性的概念 据我了解 一旦创建对象 不可变对象就无法更改其值 但我不明白不可变对象的以下用途 They are 自动是线程
  • 获取包中声明的所有 Java 类的名称

    我正在编写一个功能 它将有助于将类放入我的程序的某个包中 另外 我只想要子类某个类的类 我需要这些类才能调用它们的静态方法 有没有一种自动的方法来做到这一点 如果是的话 速度慢吗 如果我不清楚 我想要的是这样的 ArrayList
  • Java 验证日期为 yyyyMMddHHmmss

    我想在java中验证给定的日期格式为yyyyMMddHHmmss 状况 应符合格式 yyyyMMddHHmmss 它应该验证当前日期 它应该验证与当前小时有 3 小时或 3 小时差异的小时数 如果满足所有三个条件 Java 方法应返回 tr
  • while 之后无法访问的语句[重复]

    这个问题在这里已经有答案了 我只是修改代码 在以下代码中出现错误 int x 1 System out println x x while true x System out println x x 错误在最后一行 我可以知道错误 错误 无
  • Struts2中的变量声明

    Struts2中如何声明变量并为该变量赋值 使用设置标签
  • Lucene/Hibernate 搜索锁定异常

    我使用 Hibernate Search 在 Web 应用程序上索引和全文搜索项目 没有问题 来自我的 pom xml
  • AndroidAnnotations 和 Dagger

    我正在尝试使用 Dagger 注入 Android 带注释的 Activity java lang IllegalArgumentException No inject registered for members com app serv
  • 如何创建具有同等时间元素的 JavaFX 转换?

    我正在尝试 JavaFX 和动画 尤其是PathTransition 我正在创建一个简单的程序 使球 弹跳 而不使用QuadCurveTo班级 到目前为止 这是我的代码 Ellipse ball new Ellipse 375 250 10
  • Java 可变 BigInteger 类

    我正在使用 BigIntegers 进行计算 该计算使用一个调用 multiply 大约 1000 亿次的循环 并且从 BigInteger 创建新对象使其非常慢 我希望有人编写或找到了 MutableBigInteger 类 我在 jav

随机推荐

  • windows下redis设置redis开机自启动方法(保姆级)

    1 找到Redis所在的目录 在文件路径框中输入cmd 2 进入到控制台下的Redis所在目录 输入下列命令 redis server service install redis windows service conf loglevel
  • 微信小程序css设置本地背景图片

    微信小程序中 直接在css中直接使用本地图片为view设置背景图片 div class box1 div 报错 VM198 5 pages allTest allTest wxss 中的本地资源图片无法通过 WXSS 获取 可以使用网络图片
  • 一些个人常用的网站网址

    一些个人常用的网站网址 GitHub https github com Gitee https gitee com 1 书栈网 https www bookstack cn explore cid 27 tab popular 2 Unit
  • cpu要和gpu搭配吗_显卡和CPU可以随便搭配吗?

    从理论上来说 CPU和GPU是可以随意搭配 没有什么限制 只要主板支持就可以了 但是在实际操作的时候 你会发现事情没有那么简单 办公的时候 一块双核四线程的速龙200EG就可以满足 自带的核显也可以点亮电脑 那么我们就没有必要在插上一块独显
  • sparkstreamming 消费kafka(1)

    pom
  • fastdfs-client使用教程

    FastDfs客户端使用文档 fastdfs client支持框架 fastdfs client目前支持的框架有springboot1 x springboot2 x springmvc 添加fastdfs client依赖 springb
  • UnitBox:一种先进的目标检测网络

    UnitBox 一种先进的目标检测网络 摘要 1 简介 2 IOU损耗层 2 1 L2损失层 2 2 IoU损耗层 正向 2 3 IoU损耗层 向后 3 单元箱网络 4 实验 4 1 IoU损失的有效性 4 2单元箱性能 5 结论 原文 U
  • 网站开发之HTML基础知识及超链接(二)

    前面的文章我讲述了HTML的基础知识 包括 1 JSP前段设计及HTML基础介绍 2 HTML常用标记符 HEAD HTML属性 BODY设置背景 注释 FONT B I U 3 HTML设置段落格式 分段P 换行BR 标题样式Hn HR
  • Element Dialog水平垂直居中样式

    前言 Element UI 是目前最火的前端Vue js UI组件库 但是Dialog默认样式并不是水平垂直居中 这就很让人很尴尬 不过对于有水平垂直居中的需求来说 我们是可以自己进行调整的 最常用的方法也试过了 最终得到以下方法是最佳的
  • 关于C++函数返回值的使用方式以及局部对象何时析构的问题

    关于C 局部对象何时析构的探讨 我之前一直笼统的认为局部在函数调用结束之后 所有的局部变量会立刻析构 经过仔细分析之后才发现还有很多细节 这里对比了函数返回值的使用 Test t t fun 赋值 和 Test t fun 初始化 假设有一
  • html5 实现坦克大战,HTML5实现坦克大战(一)

    方法 MoveUp 坦克上移 MoveDown 坦克下移 MoveRight 坦克右移 MoveLeft 坦克左移 MyTank extends Tank EnemeyTank extends Tank Bullet Tank 字段 x y
  • 2023最新骚扰电话查询接口

    一 原始方法注入数据 初始化方法 constructor token this token Z1QljZOZiT4NTG 请求地址 this req url http api txapi cn v1 c nuisance calls que
  • Redis系列二

    1 4 Redis基础知识 1 4 1 默认数据库 Redis默认数据库数量有16个 redis conf配置文件可查看 默认使用的数据库为0 1 4 2 切换数据库 使用select 命令进行切换 root yunmx bin redis
  • C++ 信号处理

    信号是由操作系统传给进程的中断 会提早终止一个程序 在 UNIX LINUX Mac OS X 或 Windows 系统上 可以通过按 Ctrl C 产生中断 有些信号不能被程序捕获 但是下表所列信号可以在程序中捕获 并可以基于信号采取适当
  • ytb网站报错 “您没有联网,请检查网络连接”

    问题原因 解决办法 计算机时间有问题 在设置中 同步 时间 并且关闭路由器的Ipv6以绝后患 xxxxxxx com core proxy vmess encoding failed to read response header gt w
  • Matlab与VC混合编程之一

    Matlab与VC混合编程之一 1 问题的提出 为什么需要用Matlab与VC混合编程 做工程项目时用的是VC 经常会用到科学计算的相关算法 比如矩阵求逆 求行列式 求微分方程组初值问题的数值解等问题 如果自己去编写相关的函数 首先需要去找
  • windows线程调度、线程优先级和亲缘性

    windows线程调度 线程优先级和亲缘性 每一个线程在它的线程内核对象中有一个上下文结构 反映了线程最后一次执行的 CPU 寄存器状态 每隔大约 20ms 可以使用 GetSystemTimeAdjustment 获得 我测得这个间隔大约
  • android调节系统音量之修改默认音量、最大音量和最小音量

    Android系统拥有多种声音属性 包括有多媒体 通话 通知等声音属性 这些声音属性分别含有自己默认音量 最大音量和最小音量属性 下面我将介绍一下这些声音属性的音量定义和它们的修改方式 默认音量 系统声音的默认音量定义在 framework
  • ZCMU--2219: Toy Army(C语言)

    The hero of our story Valera and his best friend Arcady are still in school and therefore they spend all the free time p
  • SpringBoot 接受文件和对象

    SpringBoot 接受文件和对象 使用场景 某个接口 需要同时接受文件和实体 也就是参数 一 这个时候 前端就不能 json 格式传送数据了 要用到 multipart form data 这种格式传送数据 二 那么 这个时候 后端应该