Spring MVC 核心注解与文件上传教程

一、@RequestBody 注解详解
1. 基本使用

作用:从 HTTP 请求体中获取数据,适用于 POST/PUT 请求。
限制:GET 请求无请求体,不可使用该注解。

示例代码
@Controller
@RequestMapping("/demo01")
public class Demo01Controller {@PostMapping("/test1")public void test1(@RequestBody String requestBody, HttpServletResponse response) throws IOException {System.out.println("请求体内容:" + requestBody);response.getWriter().write(requestBody);}
}
前端测试方式
  1. 表单提交(默认格式:application/x-www-form-urlencoded
<form action="/demo01/test1" method="post"><input type="text" name="id"><input type="text" name="name"><input type="submit">
</form>

输出示例id=2&name=zhangsan

  1. AJAX JSON 提交
$("#btn").click(function() {const data = { id: 1, name: "吉林省" };$.post({url: "/demo01/test1",contentType: "application/json",data: JSON.stringify(data),success: function(res) { console.log(res); }});
});

输出示例{"id":1,"name":"吉林省"}


2. JSON 数据绑定

要求

  • 请求头必须包含 Content-Type: application/json
  • 需要 jackson-databind 依赖支持 JSON 转换
实体类与控制器
@Data // Lombok 注解,自动生成 getter/setter
public class Province {private Integer id;private String name;
}@RestController
@RequestMapping("/demo01")
public class Demo01Controller {@PostMapping("/test2")public Province test2(@RequestBody Province province) {System.out.println("接收对象:" + province);return province; // 自动转为 JSON 返回}
}
前端测试
$("#btn").click(function() {const province = { id: 2, name: "重庆" };$.post({url: "/demo01/test2",contentType: "application/json",data: JSON.stringify(province),success: function(res) { console.log(res); }});
});

输出结果Province(id=2, name=重庆)


二、文件上传实战
1. 环境配置
依赖引入
<!-- 文件上传核心依赖 -->
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.4</version>
</dependency>
Spring 配置文件
<!-- 配置 MultipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="maxUploadSize" value="10240000"/> <!-- 最大10MB --><property name="defaultEncoding" value="UTF-8"/>
</bean>

2. 单文件上传
前端表单
<form enctype="multipart/form-data" action="/demo01/upload" method="post"><input type="file" name="myfile"><input type="submit">
</form>
控制器实现
@PostMapping("/upload")
public void uploadFile(@RequestPart("myfile") MultipartFile file, HttpServletResponse response) throws IOException {// 获取文件信息String fileName = file.getOriginalFilename();long size = file.getSize();// 保存到磁盘file.transferTo(new File("D:/uploads/" + fileName));// 返回响应response.setContentType("text/html;charset=utf-8");response.getWriter().write("文件名:" + fileName + "<br>大小:" + size + "字节");
}

3. 多文件上传
前端表单
<form enctype="multipart/form-data" action="/demo01/uploads" method="post"><input type="file" name="myfiles" multiple><input type="file" name="myfiles"><input type="submit">
</form>
控制器实现
@PostMapping("/uploads")
public String uploadFiles(@RequestPart("myfiles") MultipartFile[] files) throws IOException {for (MultipartFile file : files) {if (!file.isEmpty()) {file.transferTo(new File("D:/uploads/" + file.getOriginalFilename()));}}return "上传成功!共处理 " + files.length + " 个文件";
}

三、注意事项
  1. 文件上传限制
    • 表单必须设置 enctype="multipart/form-data"
    • 提交方式必须为 POST
  2. 常见错误
    • 415 错误:未正确设置 Content-Type: application/json
    • 文件大小超限:检查 maxUploadSize 配置
  3. 依赖问题
    • 确保 Lombok、Jackson、commons-fileupload 版本匹配

通过本教程,您已掌握 Spring MVC 中请求体数据绑定和文件上传的核心技术。建议结合代码示例进行实际操作练习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/76807.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js原型链prototype解释

function Person(){} var personnew Person() console.log(啊啊,Person instanceof Function);//true console.log(,Person.__proto__Function.prototype);//true console.log(,Person.prototype.__proto__ Object.prototype);//true console.log(,Function.prototype.__prot…

为您的照片提供本地 AI 视觉:使用 Llama Vision 和 ChromaDB 构建 AI 图像标记器

有没有花 20 分钟浏览您的文件夹以找到心中的特定图像或屏幕截图&#xff1f;您并不孤单。 作为工作中的产品经理&#xff0c;我总是淹没在竞争对手产品的屏幕截图、UI 灵感以及白板会议或草图的照片的海洋中。在我的个人生活中&#xff0c;我总是捕捉我在生活中遇到的事物&am…

Kafka消费者端重平衡流程

重平衡的完整流程需要消费者 端和协调者组件共同参与才能完成。我们先从消费者的视角来审视一下重平衡的流程。在消费者端&#xff0c;重平衡分为两个步骤&#xff1a;分别是加入组和等待领导者消费者&#xff08;Leader Consumer&#xff09;分配方案。这两个步骤分别对应两类…

2025年五大ETL数据集成工具推荐

ETL工具作为打通数据孤岛的核心引擎&#xff0c;直接影响着企业的决策效率与业务敏捷性。本文精选五款实战型ETL解决方案&#xff0c;从零门槛的国产免费工具到国际大厂企业级平台&#xff0c;助您找到最适合的数据集成利器。 一、谷云科技ETLCloud&#xff1a;国产数据集成工…

PageIndex:构建无需切块向量化的 Agentic RAG

引言 你是否对长篇专业文档的向量数据库检索准确性感到失望&#xff1f;传统的基于向量的RAG系统依赖于语义相似性而非真正的相关性。但在检索中&#xff0c;我们真正需要的是相关性——这需要推理能力。当处理需要领域专业知识和多步推理的专业文档时&#xff0c;相似度搜索常…

ubuntu20.04 远程桌面Xrdp方式

1&#xff0c;Ubuntu 安装Xrdp 方法 1.1&#xff0c;安装xrdp sudo apt install xrdp 1.2&#xff0c;检查xrdp状态 sudo systemctl status xrdp 1.3&#xff0c;加入ssl-cert sudo adduser xrdp ssl-cert 1.4&#xff0c;重启xrdp服务 sudo systemctl restart xrdp 最后…

Java学习手册:RESTful API 设计原则

一、RESTful API 概述 REST&#xff08;Representational State Transfer&#xff09;即表述性状态转移&#xff0c;是一种软件架构风格&#xff0c;用于设计网络应用程序。RESTful API 是符合 REST 原则的 Web API&#xff0c;通过使用 HTTP 协议和标准方法&#xff08;GET、…

Spring Boot 核心注解全解:@SpringBootApplication背后的三剑客

大家好呀&#xff01;&#x1f44b; 今天我们要聊一个超级重要的Spring Boot话题 - 那个神奇的主类注解SpringBootApplication&#xff01;很多小伙伴可能每天都在用Spring Boot开发项目&#xff0c;但你真的了解这个注解背后的秘密吗&#xff1f;&#x1f914; 别担心&#x…

weibo_har鸿蒙微博分享,单例二次封装,鸿蒙微博,微博登录

weibo_har鸿蒙微博分享&#xff0c;单例二次封装&#xff0c;鸿蒙微博 HarmonyOS 5.0.3 Beta2 SDK&#xff0c;原样包含OpenHarmony SDK Ohos_sdk_public 5.0.3.131 (API Version 15 Beta2) &#x1f3c6;简介 zyl/weibo_har是微博封装使用&#xff0c;支持原生core使用 &a…

tomcat集成redis实现共享session

中间件&#xff1a;Tomcat、Redis、Nginx jar包要和tomcat相匹配 jar包&#xff1a;commons-pool2-2.2.jar、jedis-2.5.2.jar、tomcat-redis-session-manage-tomcat7.jar 配置Tomcat /conf/context.xml <?xml version1.0 encodingutf-8?> <!--Licensed to the A…

JavaScript 扩展Array类方法实现数组求和

题目描述&#xff1a;使用原型对象扩展Array类&#xff0c;实现返回数字型数组的和 <script>const arr [1,2,3,4,5,6]Array.prototype.sum function(){return this.reduce((prev,item)>prev item,0)}console.log(arr.sum())</script>求和函数中this 指向调用…

中间件--ClickHouse-11--部署示例(Linux宿主机部署,Docker容器部署)

一、Linux宿主机部署 1、环境准备 操作系统&#xff1a;推荐使用 CentOS 7/8 或 Ubuntu 18.04/20.04。硬件要求&#xff1a; 至少 2 核 CPU 和 4GB 内存。足够的磁盘空间&#xff08;根据数据量评估&#xff09;。CPU需支持SSE4.2指令集&#xff08;可通过以下命令检查&#…

鸿蒙NEXT开发权限工具类(申请授权相关)(ArkTs)

import abilityAccessCtrl, { Permissions } from ohos.abilityAccessCtrl; import { bundleManager, common, PermissionRequestResult } from kit.AbilityKit; import { BusinessError } from ohos.base; import { ToastUtil } from ./ToastUtil;/*** 权限工具类&#xff08;…

LVGL学习(二)(lv_label,lv_btn)

3-1_标签(lv_label) 一、标签的组成&#xff08;盒子模型&#xff09;​​ 标签由三个核心模块构成&#xff0c;类似便签纸的​​分层设计​​&#xff1a; ​​LV_PART_MAIN&#xff08;主体层&#xff09;​​ ​​功能​​&#xff1a;相当于便签纸的"纸面"&…

深度剖析神经网络:从基础原理到面试要点(二)

引言 在人工智能蓬勃发展的今天&#xff0c;神经网络作为其核心技术之一&#xff0c;广泛应用于图像识别、自然语言处理、语音识别等众多领域。深入理解神经网络的数学模型和结构&#xff0c;对于掌握人工智能技术至关重要。本文将对神经网络的关键知识点进行详细解析&#xf…

【java+Mysql】学生信息管理系统

学生信息管理系统是一种用于管理学生信息的软件系统&#xff0c;旨在提高学校管理效率和服务质量。本课程设计报告旨在介绍设计和实现学生信息管理系统的过程。报告首先分析了系统的需求&#xff0c;包括学生基本信息管理、成绩管理等功能。接着介绍了系统的设计方案&#xff0…

Linux mmp文件映射补充(自用)

addr一般为NULL由OS指明&#xff0c;length所需长度&#xff08;4kb对齐&#xff09;&#xff0c;prot&#xff08;权限&#xff0c;一般O_RDWR以读写&#xff09;&#xff0c; flag&#xff08;MAP_SHARED(不刷新到磁盘上&#xff0c;此进程独有)和MAP_PRIVATE&#xff08;刷新…

Nginx openresty web服务 与 Go 原生web服务性能对比

1 概述 Nginx采用的是IO复用模型&#xff0c;能处理超高并发。 Go语言采用协程&#xff0c;能轻量级的处理超高并发。 那么在不考虑业务逻辑复杂的前提下&#xff0c;即假如将Nginx和Go都提供一个/test接口&#xff0c;并在接口逻辑中都只是让其做20毫秒的耗时操作&#xff0c…

[创业之路-377]:企业法务 - 有限责任公司与股份有限公司的优缺点对比

有限责任公司&#xff08;简称“有限公司”&#xff09;与股份有限公司&#xff08;简称“股份公司”&#xff09;是我国《公司法》规定的两种主要公司形式&#xff0c;二者在设立条件、治理结构、股东权利义务等方面存在显著差异。以下从核心特征、设立条件、治理结构、股东权…

QEMU源码全解析 —— 块设备虚拟化(21)

接前一篇文章:QEMU源码全解析 —— 块设备虚拟化(20) 本文内容参考: 《趣谈Linux操作系统》 —— 刘超,极客时间 《QEMU/KVM源码解析与应用》 —— 李强,机械工业出版社 特此致谢! 上一回开始解析blockdev_init函数,讲到了其中调用的blk_new_open函数,该函数的作用…