欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring MVC請求參數(shù)的傳遞方式

 更新時間:2024年10月28日 08:46:27   作者:2的n次方_  
Spring MVC是一種基于Model-View-Controller(MVC)設(shè)計模式的輕量級Web框架,用于Java應(yīng)用程序的開發(fā),在處理HTTP請求時,Spring MVC會涉及到請求參數(shù)的傳遞,本文給大家介紹了Spring MVC請求參數(shù)的傳遞方式,需要的朋友可以參考下

1. 傳遞單個參數(shù)

接收單個參數(shù),直接在方法中加入?yún)?shù)即可

@RequestMapping("/param")
@RestController
public class ParamController {
    @RequestMapping("/m1")
    public String method1(String name){
        return "接收到參數(shù)name: " + name;
    }
}

在傳遞參數(shù)的時候,代碼中的參數(shù)名稱需要和請求的參數(shù)名稱是一致的

如果傳入的參數(shù)是整形呢,整數(shù)的話是可以用 Integer 和 int 來表示的,下面來演示一下

@RequestMapping("/m2")
public String method2(Integer age){
return "接收到參數(shù)age: " + age;
}
@RequestMapping("/m3")
public String method3(int age){
return "接收到參數(shù)age: " + age;
}

那么他們的區(qū)別是什么呢?

接下來試著不傳參,發(fā)現(xiàn) int 定義的參數(shù)是直接報錯了,Integer 定義的是可以接受 null 的

并且無論是 int 還是 Integer,傳入的參數(shù)一定要對應(yīng),否則也會報錯

錯誤日志上描述的是 String 類型轉(zhuǎn)化為其他類型失敗,傳遞的普通參數(shù),默認(rèn)的類型是 String ,后端接收時根據(jù)定義的類型再進(jìn)行相應(yīng)的轉(zhuǎn)化

int 等一些基本數(shù)據(jù)類型不能傳入 null,不過 boolean 是可以傳入 null 的

@RequestMapping("/m4")
public String method4(Boolean gender){
return "接收到參數(shù)gender: " + gender;
}
@RequestMapping("/m5")
public String method5(boolean gender){
return "接收到參數(shù)gender: " + gender;
}

可以看出,如果不傳參數(shù)的話,Boolean 接收到的是 null,boolean 接收到的 false,boolean 類型默認(rèn)就是 false

2. 傳遞多個參數(shù)

多個參數(shù)也是可以直接傳遞的,并且不需要保證傳參的順序,只需要參數(shù)名對應(yīng)即可

@RequestMapping("/m6")
public String method6(String name,Integer age){
    return "接收到參數(shù)name: " + name + "," + "age: " + age ;
}

再傳遞幾個參數(shù)也是可以的,不過這種方式傳遞這么多參數(shù)就有些麻煩了,可以通過傳遞對象的方式可以傳入多個參數(shù)

創(chuàng)建一個 User 的類(重寫了 toString() 方法)之后再進(jìn)行對象的傳遞

@RequestMapping("/m7")
public String method7(User user){
return "接收到參數(shù)user: " + user;
}

通過傳入對象的方式就可以進(jìn)行多個參數(shù)的傳遞,在之前,如果 int 類型參數(shù)沒有傳的話是會報錯的,如果對象中使用 int 類型來描述屬性的話,傳遞參數(shù)時不傳也不會報錯:

因為 age 是成員變量,是有默認(rèn)值的,即使如此,還是建議使用包裝類型,可以避免一些難以預(yù)料的問題

3. 參數(shù)重命名

在上面提到過,前端傳遞的參數(shù)要和后端方法里的參數(shù)保持一致,而前端可能會傳入各種各樣的參數(shù),比如 userName, productName 等,后端如果只想要一個 name 的話可以對前端傳遞的參數(shù)進(jìn)行重命名,把前端傳入的名稱都重命名為 name,后續(xù)就使用 name 進(jìn)行操作,這就需要使用到 @RequestParam注解

@RequestMapping("/m8")
public String method8(@RequestParam("userName") String name){
    return "接收到參數(shù)name: " + name;
}

@RequestParam就起到了參數(shù)綁定的作用,把前端的 userName 和后端的 name 進(jìn)行了綁定,那如果前端還是傳入 name 會怎么樣呢

直接報了一個 400 的錯誤,并且無論是傳入?yún)?shù)和名稱不對應(yīng)還是不傳遞參數(shù),都會報錯

意思就是傳遞 userName 的參數(shù),相當(dāng)于強(qiáng)制綁定

來看 @RequestParam的源碼:

value(或name)屬性:用于指定請求參數(shù)的名稱

required屬性:表示該參數(shù)是否必須在請求中存在。如果設(shè)置為true,當(dāng)請求中沒有這個參數(shù)時,會拋出異常。如果設(shè)置為false,則在請求中沒有該參數(shù)時,會使用默認(rèn)值(如果有設(shè)置默認(rèn)值)或者為null。

在使用@RequestParam注解時,如果只提供一個字符串參數(shù),它會被視為value(或name)屬性的值。

@RequestMapping("/m8")
public String method8(@RequestParam(value = "userName",required = false) String name){
    return "接收到參數(shù)name: " + name;
}

把 required 改為 false 不傳遞參數(shù)也不會報錯,會使用默認(rèn)值或者 null

4. 傳遞數(shù)組

@RequestMapping("/m9")
public String method9(String[] arr){
    return "接收到參數(shù)name: " + List.of(arr);
}

傳遞數(shù)組的方式是有兩種的,第一種就是直接傳入數(shù)組中的數(shù)據(jù),第二種就是傳入多個數(shù)據(jù),參數(shù)一致

那么第一種傳入的數(shù)據(jù)是按照字符來傳的還是按照數(shù)組中的三個元素來傳的

調(diào)試一下發(fā)現(xiàn)是按照數(shù)組元素的形式自動切割了

5. 傳遞集合

數(shù)組可以通過上面的方式傳,那么 List 行不行呢

@RequestMapping("/m10")
public String method10(List<String> list){
    return "接收到參數(shù)list: " + list;
}

這一次是直接報錯了,顯示 500 的狀態(tài)碼

拋出了異常,無法構(gòu)造一個 List

原因是發(fā)送上述請求時,默認(rèn)是把請求的參數(shù)封裝成數(shù)組的,并不是一個 List,所以需要進(jìn)行參數(shù)綁定,也就是把數(shù)組轉(zhuǎn)化為 List

@RequestMapping("/m10")
public String method10(@RequestParam List<String> list){
    return "接收到參數(shù)list: " + list;
}

6. 傳遞 JSON 數(shù)據(jù)

6.1. JSON 語法

  • 數(shù)據(jù)在鍵值對(Key/Value)中;
  • 數(shù)據(jù)由逗號 , 分隔;
  • 對象用 {} 表示;
  • 數(shù)組用 [] 表示;
  • 值可以為對象,也可以為數(shù)組,數(shù)組中可以包含多個對象。

接下來看 JSON 是怎么轉(zhuǎn)化為 java 對象的:

使用 ObjectMapper 對象提供的兩個?法,可以完成對象和 JSON 字符串的互轉(zhuǎn)。

writeValueAsString:把對象轉(zhuǎn)為 JSON 字符串。

readValue:把字符串轉(zhuǎn)為對象。

public class JsonTest {
    public static void main(String[] args) throws JsonProcessingException {
        ObjectMapper objectMapper = new ObjectMapper();
        User user = new User();
        user.setName("zhangsan");
        user.setGender(1);
        user.setAge(18);
        //對象轉(zhuǎn)JSON
        String s = objectMapper.writeValueAsString(user);
        System.out.println(s);
        //JSON轉(zhuǎn)對象
        User user1 = objectMapper.readValue(s,User.class);
        System.out.println(user1);
    }
}

6.2. 傳遞 JSON

傳遞 JSON 參數(shù)是通過@RequestBody注解來實現(xiàn)的,從請求正文中獲取數(shù)據(jù)

@RequestMapping("/m11")
public String method11(@RequestBody User user){
    return "接收到參數(shù)user: " + user;
}

可以看出,請求的數(shù)據(jù)格式是不同的

以上就是Spring MVC請求參數(shù)的傳遞方式的詳細(xì)內(nèi)容,更多關(guān)于Spring MVC請求參數(shù)傳遞的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Java中二叉樹的基礎(chǔ)概念(遞歸&迭代)

    詳解Java中二叉樹的基礎(chǔ)概念(遞歸&迭代)

    二叉樹(Binary?tree)是樹形結(jié)構(gòu)的一個重要類型。本文將通過圖片和示例代碼詳細(xì)為大家講解一下Java中的二叉樹的基礎(chǔ)概念,需要的可以參考一下
    2022-03-03
  • 老生常談Java異常處理和設(shè)計(推薦)

    老生常談Java異常處理和設(shè)計(推薦)

    下面小編就為大家?guī)硪黄仙U凧ava異常處理和設(shè)計(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • java實現(xiàn)同態(tài)加密算法的實例代碼

    java實現(xiàn)同態(tài)加密算法的實例代碼

    這篇文章主要給大家介紹了關(guān)于java實現(xiàn)同態(tài)加密算法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • SpringBoot下載Excel文件時,報錯文件損壞的解決方案

    SpringBoot下載Excel文件時,報錯文件損壞的解決方案

    這篇文章主要介紹了SpringBoot下載Excel文件時,報錯文件損壞的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 一篇文章帶你了解java接口與繼承

    一篇文章帶你了解java接口與繼承

    這篇文章主要介紹了Java接口和繼承操作,結(jié)合具體實例形式分析了Java接口和繼承與使用的相關(guān)原理、操作技巧與注意事項,需要的朋友可以參考下
    2021-08-08
  • Windows中使用Java生成Excel文件并插入圖片的方法

    Windows中使用Java生成Excel文件并插入圖片的方法

    這篇文章主要介紹了Windows中使用Java生成Excel文件并插入圖片的方法,其中向Excel中插入圖片文中通過使用Apache POI來實現(xiàn),需要的朋友可以參考下
    2016-02-02
  • Java中的JScrollPane使用詳細(xì)說明

    Java中的JScrollPane使用詳細(xì)說明

    這篇文章主要給大家介紹了關(guān)于Java中JScrollPane使用的相關(guān)資料,Java JScrollPane是Swing庫提供的一個組件,用于在需要滾動的區(qū)域中顯示內(nèi)容,需要的朋友可以參考下
    2024-07-07
  • SpringBoot圖文并茂講解Lombok庫的安裝與使用

    SpringBoot圖文并茂講解Lombok庫的安裝與使用

    Lombok想要解決了的是在我們實體Bean中大量的Getter/Setter方法,以及toString, hashCode等可能不會用到,但是某些時候仍然需要復(fù)寫,以期方便使用的方法;在使用Lombok之后,將由其來自動幫你實現(xiàn)代碼生成
    2022-06-06
  • 一文帶你了解如何正確使用Java中的字符串常量池

    一文帶你了解如何正確使用Java中的字符串常量池

    研究表明,Java堆中對象占據(jù)最大比重的就是字符串對象,所以弄清楚字符串知識對學(xué)習(xí)Java很重要。本文主要重點聊聊字符串常量池,希望對大家有所幫助
    2022-12-12
  • SpringBoot下無節(jié)制和數(shù)據(jù)庫建立連接的問題及解決方法

    SpringBoot下無節(jié)制和數(shù)據(jù)庫建立連接的問題及解決方法

    本文介紹了無節(jié)制建立MySQL連接的危害,包括數(shù)據(jù)庫服務(wù)端資源耗盡、應(yīng)用端性能劣化和監(jiān)控與運(yùn)維困境,提出了系統(tǒng)性解決方案,包括連接池標(biāo)準(zhǔn)化配置、代碼規(guī)范與防御式編程、全鏈路監(jiān)控體系和架構(gòu)級優(yōu)化,感興趣的朋友一起看看吧
    2025-03-03

最新評論