目錄
1.前言
2.正文
2.1基礎參數傳遞
2.1.1單參數
2.1.2多參數
2.2對象參數綁定
2.2.1自動封裝對象
2.2.2參數別名處理
2.3集合類型處理
2.3.1數組接收
2.3.2List集合接收
2.4JSON參數處理
2.4.1介紹JSON
2.4.2傳遞JSON參數
2.5RESTful風格參數
2.6文件上傳處理
2.7完整調試代碼
3.小結
1.前言
哈嘍大家好吖,在SpringMVC開發中,參數傳遞是開發者每天都要面對的核心問題。不同的業務場景需要采用不同的參數接收方式,合理的參數處理能大幅提升開發效率和代碼質量。本文將通過一個完整的RequestController
案例,詳解10種常見參數傳遞方式,助你徹底掌握SpringMVC參數傳遞技巧。
2.正文
官方文檔:Spring Framework Documentation :: Spring Frameworkhttps://docs.spring.io/spring-framework/reference/
2.1基礎參數傳遞
2.1.1單參數
@RequestMapping("/r1")
public String r1(String keyword){return "接收參數:" + keyword;
}
調用示例:
/request/r1?keyword=spring
特點:
參數名與方法參數名嚴格匹配
自動完成基本類型轉換(String→int等)
若參數不存在會注入
null
2.1.2多參數
@RequestMapping("r2")
public String r2(String name, int id){return "receive:" + name + id;
}
調用示例:
/request/r2?name=Alice&id=1001
注意事項:
基本類型參數不能為null(如int)
推薦使用包裝類型
Integer
避免空指針異常
避免空指針:
@RequestMapping("r3")public String r3(Integer number){return "receive" + number;}
2.2對象參數綁定
2.2.1自動封裝對象
@RequestMapping("r4")
public String r4(student s1){return "receive" + s1.toString();
}
調用示例:
/request/r4?id=1002&name=Bob
實現機制:
Spring自動創建Student實例
通過setter方法進行屬性注入
支持嵌套對象屬性綁定
2.2.2參數別名處理
@RequestMapping("/r5")
public String r5(@RequestParam(value = "n", required = false)String name){return "receive" + name;
}
注解說明:
value
:指定參數別名
required
:是否必須參數(默認true)
defaultValue
:默認值設置
2.3集合類型處理
2.3.1數組接收
@RequestMapping("/r6")
public String r6(String[] array){return "receive" + Arrays.toString(array);
}
調用方式:
/request/r6?array=1&array=2
/request/r6?array=1,2,3
2.3.2List集合接收
@RequestMapping("/r7")
public String r7(@RequestParam List<Integer> list){return "receive:" + list;
}
特別注意:
必須使用
@RequestParam
注解禁止使用ArrayList等具體實現類
推薦使用包裝類型避免轉型異常
2.4JSON參數處理
2.4.1介紹JSON
JSON(JavaScript Object Notation,JavaScript對象表示法)是一種輕量級的數據交換格式,易于人閱讀和編寫,同時也易于機器解析和生成。它基于純文本,使用Unicode編碼,具有廣泛的兼容性和靈活性,常用于網絡應用之間的數據傳輸。
JSON格式以鍵值對的形式組織數據,支持兩種主要的數據結構:
對象(Object)
一個無序的鍵值對集合,用大括號“{}”括起來。
鍵(Key)必須是字符串類型,值(Value)可以是字符串、數值、布爾值、數組、對象或
null
。鍵與值之間用英文冒號“:”分隔,鍵值對之間用英文逗號“,”分隔。
例如:
{"name": "Kimi","age": 25,"isStudent": false,"hobbies": ["reading", "traveling"],"address": {"city": "Beijing","country": "China"} }
數組(Array)
一個有序的值集合,用方括號“[]”括起來。
數組中的值可以是任意類型,包括字符串、數值、布爾值、對象、數組或
null
。數組中的值之間用英文逗號“,”分隔。
例如:
["apple",123,true,null,{"key": "value"},[1, 2, 3] ]
在SpringMVC中,JSON參數的自動轉換依賴于HttpMessageConverter體系。當檢測到請求的Content-Type
為application/json
時,框架會使用MappingJackson2HttpMessageConverter
進行數據綁定。
處理流程:
前端發送JSON格式請求體
DispatcherServlet選擇匹配的消息轉換器
Jackson庫將JSON反序列化為Java對象
通過
@RequestBody
注入方法參數
2.4.2傳遞JSON參數
@RequestMapping("/r8")
public String r8(@RequestBody student student1){return student1.toString();
}
請求要求:
Content-Type必須為
application/json
需要Jackson依賴支持
支持嵌套復雜對象解析
請求示例:
{"id": 1003, "name": "Carol"}
2.5RESTful風格參數
@RequestMapping("/path/{pathid}")
public String r9(@PathVariable Integer pathid){return "獲取路徑id" + pathid;
}
調用示例:
/request/path/1004
最佳實踐:
適合資源定位場景
支持正則表達式校驗
可配合
@GetMapping
等注解使用
2.6文件上傳處理
@RequestMapping("/r10")
public String r10(MultipartFile file) throws IOException {file.transferTo(new File("D:\\桌面\\" + file.getOriginalFilename()));return "文件上傳成功";
}
表單需設置
enctype="multipart/form-data"
支持多文件同時上傳
注意文件存儲路徑權限問題
2.7完整調試代碼
package com.example.demo;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;
import java.util.List;class student{int id;String name;public student() {}public student(int id, String name) {this.id = id;this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return super.toString();}
}@RequestMapping("/request")
@Controller
@ResponseBody
public class RequestController {@RequestMapping("/r1")public String r1(String keyword){return "接收參數:" + keyword;}@RequestMapping("r2")public String r2(String name, int id){return "receive:" + name + id;}@RequestMapping("r3")public String r3(Integer number){return "receive" + number;}@RequestMapping("r4")public String r4(student s1){return "receive" + s1.toString();}//從前端接受參數n,賦值給name@RequestMapping("/r5")public String r5(@RequestParam(value = "n", required = false)String name){return "receive" + name;}//傳遞數組@RequestMapping("/r6")public String r6(String[] array){return "receive" + array.toString();}//傳遞集合@RequestMapping("/r7")public String r7(@RequestParam List<Integer> list){return "receive:" + list;}//傳遞json@RequestMapping("/r8")public String r8(@RequestBody student student1){return student1.toString();}//從URL中獲取參數@RequestMapping("/path/{pathid}")public String r9(@PathVariable Integer pathid){return "獲取路徑id" + pathid;}//上傳文件@RequestMapping("/r10")public String r10(MultipartFile file) throws IOException {System.out.println(file.getOriginalFilename());file.transferTo(new File("D:\\桌面\\" + file.getOriginalFilename()));return "文件上傳成功";}}
3.小結
今天的分享到這里就結束了,喜歡的小伙伴點點贊點點關注,你的支持就是對我最大的鼓勵,大家加油!