最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringMVC參數(shù)傳遞技巧與實(shí)戰(zhàn)指南(完整案例)

 更新時(shí)間:2025年05月07日 10:30:55   作者:愛吃烤雞翅的酸菜魚  
文將通過一個(gè)完整的RequestController案例,詳解10種常見參數(shù)傳遞方式,助你徹底掌握SpringMVC參數(shù)傳遞技巧,感興趣的朋友一起看看吧

1.前言

哈嘍大家好吖,在SpringMVC開發(fā)中,參數(shù)傳遞是開發(fā)者每天都要面對(duì)的核心問題。不同的業(yè)務(wù)場(chǎng)景需要采用不同的參數(shù)接收方式,合理的參數(shù)處理能大幅提升開發(fā)效率和代碼質(zhì)量。本文將通過一個(gè)完整的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
  • 特點(diǎn)
    • 參數(shù)名與方法參數(shù)名嚴(yán)格匹配
    • 自動(dòng)完成基本類型轉(zhuǎn)換(String→int等)
    • 若參數(shù)不存在會(huì)注入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
  • 注意事項(xiàng)
    • 基本類型參數(shù)不能為null(如int)
    • 推薦使用包裝類型Integer避免空指針異常

避免空指針:

@RequestMapping("r3")
    public String r3(Integer number){
        return "receive" + number;
    }

2.2對(duì)象參數(shù)綁定

2.2.1自動(dòng)封裝對(duì)象

@RequestMapping("r4")
public String r4(student s1){
    return "receive" + s1.toString();
}
  • 調(diào)用示例/request/r4?id=1002&name=Bob
  • 實(shí)現(xiàn)機(jī)制
    • Spring自動(dòng)創(chuàng)建Student實(shí)例
    • 通過setter方法進(jìn)行屬性注入
    • 支持嵌套對(duì)象屬性綁定

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等具體實(shí)現(xiàn)類
    • 推薦使用包裝類型避免轉(zhuǎn)型異常

2.4JSON參數(shù)處理

2.4.1介紹JSON

JSON(JavaScript Object Notation,JavaScript對(duì)象表示法)是一種輕量級(jí)的數(shù)據(jù)交換格式,易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成。它基于純文本,使用Unicode編碼,具有廣泛的兼容性和靈活性,常用于網(wǎng)絡(luò)應(yīng)用之間的數(shù)據(jù)傳輸。

JSON格式以鍵值對(duì)的形式組織數(shù)據(jù),支持兩種主要的數(shù)據(jù)結(jié)構(gòu):

  • 對(duì)象(Object)
    • 一個(gè)無序的鍵值對(duì)集合,用大括號(hào)“{}”括起來。
    • 鍵(Key)必須是字符串類型,值(Value)可以是字符串、數(shù)值、布爾值、數(shù)組、對(duì)象或null
    • 鍵與值之間用英文冒號(hào)“:”分隔,鍵值對(duì)之間用英文逗號(hào)“,”分隔。
    • 例如:
{
  "name": "Kimi",
  "age": 25,
  "isStudent": false,
  "hobbies": ["reading", "traveling"],
  "address": {
    "city": "Beijing",
    "country": "China"
  }
}
  • 數(shù)組(Array)
    • 一個(gè)有序的值集合,用方括號(hào)“[]”括起來。
    • 數(shù)組中的值可以是任意類型,包括字符串、數(shù)值、布爾值、對(duì)象、數(shù)組或null。
    • 數(shù)組中的值之間用英文逗號(hào)“,”分隔。
    • 例如:
[
  "apple",
  123,
  true,
  null,
  {"key": "value"},
  [1, 2, 3]
]

在SpringMVC中,JSON參數(shù)的自動(dòng)轉(zhuǎn)換依賴于HttpMessageConverter體系。當(dāng)檢測(cè)到請(qǐng)求的Content-Typeapplication/json時(shí),框架會(huì)使用MappingJackson2HttpMessageConverter進(jìn)行數(shù)據(jù)綁定。

  • 處理流程
    • 前端發(fā)送JSON格式請(qǐng)求體
    • DispatcherServlet選擇匹配的消息轉(zhuǎn)換器
    • Jackson庫將JSON反序列化為Java對(duì)象
    • 通過@RequestBody注入方法參數(shù)

2.4.2傳遞JSON參數(shù)

@RequestMapping("/r8")
public String r8(@RequestBody student student1){
    return student1.toString();
}
  • 請(qǐng)求要求
    • Content-Type必須為application/json
    • 需要Jackson依賴支持
    • 支持嵌套復(fù)雜對(duì)象解析
  • 請(qǐng)求示例
{"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
  • 最佳實(shí)踐
    • 適合資源定位場(chǎng)景
    • 支持正則表達(dá)式校驗(yàn)
    • 可配合@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"
  • 支持多文件同時(shí)上傳
  • 注意文件存儲(chǔ)路徑權(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é)束了,喜歡的小伙伴點(diǎn)點(diǎn)贊點(diǎn)點(diǎn)關(guān)注,你的支持就是對(duì)我最大的鼓勵(lì),大家加油!

到此這篇關(guān)于SpringMVC參數(shù)傳遞技巧與實(shí)戰(zhàn)指南(完整案例)的文章就介紹到這了,更多相關(guān)SpringMVC參數(shù)傳遞內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring注解之Service用法及示例詳解

    Spring注解之Service用法及示例詳解

    使用 @Service 注解可以將一個(gè)類聲明為業(yè)務(wù)邏輯組件,并將其對(duì)象存入 Spring 容器中,在控制器類中,通過注入該組件的實(shí)例,即可調(diào)用其中的方法,這篇文章主要介紹了Spring注解之Service用法及示例詳解,需要的朋友可以參考下
    2024-04-04
  • SpringBoot整合RocketMQ批量發(fā)送消息的實(shí)現(xiàn)代碼

    SpringBoot整合RocketMQ批量發(fā)送消息的實(shí)現(xiàn)代碼

    這篇文章主要介紹了SpringBoot整合RocketMQ批量發(fā)送消息的實(shí)現(xiàn),文中通過代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-04-04
  • Spring RabbitMQ死信機(jī)制原理實(shí)例詳解

    Spring RabbitMQ死信機(jī)制原理實(shí)例詳解

    這篇文章主要介紹了Spring RabbitMQ死信機(jī)制原理實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • JavaSE的類和對(duì)象你真的了解嗎

    JavaSE的類和對(duì)象你真的了解嗎

    這篇文章主要為大家詳細(xì)介紹了JavaSE的類和對(duì)象,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • mybatis中使用list作為參數(shù)方式

    mybatis中使用list作為參數(shù)方式

    在使用MyBatis時(shí),若要在Mapper XML中使用List作為參數(shù),并且collection屬性值類型為L(zhǎng)ist,需要注意傳入的參數(shù)為L(zhǎng)ist時(shí)不能使用lists!=null進(jìn)行判斷
    2026-01-01
  • Java基礎(chǔ)之?dāng)?shù)組詳解

    Java基礎(chǔ)之?dāng)?shù)組詳解

    這篇文章主要介紹了Java基礎(chǔ)之?dāng)?shù)組詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • java多線程Future和Callable類示例分享

    java多線程Future和Callable類示例分享

    JAVA多線程實(shí)現(xiàn)方式主要有三種:繼承Thread類、實(shí)現(xiàn)Runnable接口、使用ExecutorService、Callable、Future實(shí)現(xiàn)有返回結(jié)果的多線程。其中前兩種方式線程執(zhí)行完后都沒有返回值,只有最后一種是帶返回值的。今天我們就來研究下Future和Callable的實(shí)現(xiàn)方法
    2016-01-01
  • openGauss數(shù)據(jù)庫JDBC環(huán)境連接配置的詳細(xì)過程(Eclipse)

    openGauss數(shù)據(jù)庫JDBC環(huán)境連接配置的詳細(xì)過程(Eclipse)

    這篇文章主要介紹了openGauss數(shù)據(jù)庫JDBC環(huán)境連接配置(Eclipse),演示基于JDBC開發(fā)的主要步驟,會(huì)涉及創(chuàng)建數(shù)據(jù)庫、創(chuàng)建表、插入數(shù)據(jù)等,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-06-06
  • SpringBootTest--踩坑錯(cuò)誤的解決

    SpringBootTest--踩坑錯(cuò)誤的解決

    這篇文章主要介紹了SpringBootTest--踩坑錯(cuò)誤的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 深入了解JAVA數(shù)據(jù)類型與運(yùn)算符

    深入了解JAVA數(shù)據(jù)類型與運(yùn)算符

    這篇文章主要介紹了Java基本數(shù)據(jù)類型和運(yùn)算符,結(jié)合實(shí)例形式詳細(xì)分析了java基本數(shù)據(jù)類型、數(shù)據(jù)類型轉(zhuǎn)換、算術(shù)運(yùn)算符、邏輯運(yùn)算符等相關(guān)原理與操作技巧,需要的朋友可以參考下
    2021-07-07

最新評(píng)論

榆社县| 北海市| 九龙坡区| 藁城市| 象山县| 玉环县| 塔河县| 大城县| 吉木乃县| 股票| 牡丹江市| 清水河县| 绥德县| 平远县| 晋江市| 大名县| 左贡县| 苍山县| 威宁| 永兴县| 嘉善县| 周至县| 清流县| 屏东市| 东宁县| 大足县| 武威市| 平昌县| 灵武市| 湖口县| 蓬溪县| 闽侯县| 睢宁县| 炎陵县| 株洲县| 陕西省| 家居| 穆棱市| 常山县| 江山市| 衡东县|