SpringMVC參數(shù)傳遞技巧與實戰(zhàn)指南(完整案例)
1.前言
哈嘍大家好吖,在SpringMVC開發(fā)中,參數(shù)傳遞是開發(fā)者每天都要面對的核心問題。不同的業(yè)務(wù)場景需要采用不同的參數(shù)接收方式,合理的參數(shù)處理能大幅提升開發(fā)效率和代碼質(zhì)量。本文將通過一個完整的RequestController案例,詳解10種常見參數(shù)傳遞方式,助你徹底掌握SpringMVC參數(shù)傳遞技巧。
2.正文
官方文檔:Spring Framework Documentation :: Spring Framework
https://docs.spring.io/spring-framework/reference/
2.1基礎(chǔ)參數(shù)傳遞
2.1.1單參數(shù)
@RequestMapping("/r1")
public String r1(String keyword){
return "接收參數(shù):" + keyword;
}
- 調(diào)用示例:
/request/r1?keyword=spring- 特點:
- 參數(shù)名與方法參數(shù)名嚴(yán)格匹配
- 自動完成基本類型轉(zhuǎn)換(String→int等)
- 若參數(shù)不存在會注入
null
2.1.2多參數(shù)
@RequestMapping("r2")
public String r2(String name, int id){
return "receive:" + name + id;
}
- 調(diào)用示例:
/request/r2?name=Alice&id=1001- 注意事項:
- 基本類型參數(shù)不能為null(如int)
- 推薦使用包裝類型
Integer避免空指針異常
避免空指針:
@RequestMapping("r3")
public String r3(Integer number){
return "receive" + number;
}2.2對象參數(shù)綁定
2.2.1自動封裝對象
@RequestMapping("r4")
public String r4(student s1){
return "receive" + s1.toString();
}
- 調(diào)用示例:
/request/r4?id=1002&name=Bob- 實現(xiàn)機(jī)制:
- Spring自動創(chuàng)建Student實例
- 通過setter方法進(jìn)行屬性注入
- 支持嵌套對象屬性綁定
2.2.2參數(shù)別名處理
@RequestMapping("/r5")
public String r5(@RequestParam(value = "n", required = false)String name){
return "receive" + name;
}
- 注解說明:
value:指定參數(shù)別名required:是否必須參數(shù)(默認(rèn)true)defaultValue:默認(rèn)值設(shè)置
2.3集合類型處理
2.3.1數(shù)組接收
@RequestMapping("/r6")
public String r6(String[] array){
return "receive" + Arrays.toString(array);
}
- 調(diào)用方式:
/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等具體實現(xiàn)類
- 推薦使用包裝類型避免轉(zhuǎn)型異常
2.4JSON參數(shù)處理
2.4.1介紹JSON
JSON(JavaScript Object Notation,JavaScript對象表示法)是一種輕量級的數(shù)據(jù)交換格式,易于人閱讀和編寫,同時也易于機(jī)器解析和生成。它基于純文本,使用Unicode編碼,具有廣泛的兼容性和靈活性,常用于網(wǎng)絡(luò)應(yīng)用之間的數(shù)據(jù)傳輸。
JSON格式以鍵值對的形式組織數(shù)據(jù),支持兩種主要的數(shù)據(jù)結(jié)構(gòu):
- 對象(Object)
- 一個無序的鍵值對集合,用大括號“{}”括起來。
- 鍵(Key)必須是字符串類型,值(Value)可以是字符串、數(shù)值、布爾值、數(shù)組、對象或
null。- 鍵與值之間用英文冒號“:”分隔,鍵值對之間用英文逗號“,”分隔。
- 例如:
{
"name": "Kimi",
"age": 25,
"isStudent": false,
"hobbies": ["reading", "traveling"],
"address": {
"city": "Beijing",
"country": "China"
}
}
- 數(shù)組(Array)
- 一個有序的值集合,用方括號“[]”括起來。
- 數(shù)組中的值可以是任意類型,包括字符串、數(shù)值、布爾值、對象、數(shù)組或
null。- 數(shù)組中的值之間用英文逗號“,”分隔。
- 例如:
[
"apple",
123,
true,
null,
{"key": "value"},
[1, 2, 3]
]在SpringMVC中,JSON參數(shù)的自動轉(zhuǎn)換依賴于HttpMessageConverter體系。當(dāng)檢測到請求的Content-Type為application/json時,框架會使用MappingJackson2HttpMessageConverter進(jìn)行數(shù)據(jù)綁定。
- 處理流程:
- 前端發(fā)送JSON格式請求體
- DispatcherServlet選擇匹配的消息轉(zhuǎn)換器
- Jackson庫將JSON反序列化為Java對象
- 通過
@RequestBody注入方法參數(shù)
2.4.2傳遞JSON參數(shù)
@RequestMapping("/r8")
public String r8(@RequestBody student student1){
return student1.toString();
}
- 請求要求:
- Content-Type必須為
application/json- 需要Jackson依賴支持
- 支持嵌套復(fù)雜對象解析
- 請求示例:
{"id": 1003, "name": "Carol"}2.5RESTful風(fēng)格參數(shù)
@RequestMapping("/path/{pathid}")
public String r9(@PathVariable Integer pathid){
return "獲取路徑id" + pathid;
}
- 調(diào)用示例:
/request/path/1004- 最佳實踐:
- 適合資源定位場景
- 支持正則表達(dá)式校驗
- 可配合
@GetMapping等注解使用
2.6文件上傳處理
@RequestMapping("/r10")
public String r10(MultipartFile file) throws IOException {
file.transferTo(new File("D:\\桌面\\" + file.getOriginalFilename()));
return "文件上傳成功";
}
- 表單需設(shè)置
enctype="multipart/form-data"- 支持多文件同時上傳
- 注意文件存儲路徑權(quán)限問題
2.7完整調(diào)試代碼
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;
}
@Override
public String toString() {
return super.toString();
}
}
@RequestMapping("/request")
@Controller
@ResponseBody
public class RequestController {
@RequestMapping("/r1")
public String r1(String keyword){
return "接收參數(shù):" + 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();
}
//從前端接受參數(shù)n,賦值給name
@RequestMapping("/r5")
public String r5(@RequestParam(value = "n", required = false)String name){
return "receive" + name;
}
//傳遞數(shù)組
@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中獲取參數(shù)
@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.小結(jié)
今天的分享到這里就結(jié)束了,喜歡的小伙伴點點贊點點關(guān)注,你的支持就是對我最大的鼓勵,大家加油!
到此這篇關(guān)于SpringMVC參數(shù)傳遞技巧與實戰(zhàn)指南(完整案例)的文章就介紹到這了,更多相關(guān)SpringMVC參數(shù)傳遞內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot整合RocketMQ批量發(fā)送消息的實現(xiàn)代碼
這篇文章主要介紹了SpringBoot整合RocketMQ批量發(fā)送消息的實現(xiàn),文中通過代碼示例講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-04-04
openGauss數(shù)據(jù)庫JDBC環(huán)境連接配置的詳細(xì)過程(Eclipse)
這篇文章主要介紹了openGauss數(shù)據(jù)庫JDBC環(huán)境連接配置(Eclipse),演示基于JDBC開發(fā)的主要步驟,會涉及創(chuàng)建數(shù)據(jù)庫、創(chuàng)建表、插入數(shù)據(jù)等,本文通過實例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06
深入了解JAVA數(shù)據(jù)類型與運(yùn)算符
這篇文章主要介紹了Java基本數(shù)據(jù)類型和運(yùn)算符,結(jié)合實例形式詳細(xì)分析了java基本數(shù)據(jù)類型、數(shù)據(jù)類型轉(zhuǎn)換、算術(shù)運(yùn)算符、邏輯運(yùn)算符等相關(guān)原理與操作技巧,需要的朋友可以參考下2021-07-07

