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.pswp.cn/web/76807.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76807.shtml
英文地址,請注明出處:http://en.pswp.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函數,該函數的作用…