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

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

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

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

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

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

在傳遞參數(shù)的時(shí)候,代碼中的參數(shù)名稱需要和請(qǐng)求的參數(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ù)是直接報(bào)錯(cuò)了,Integer 定義的是可以接受 null 的

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

錯(cuò)誤日志上描述的是 String 類型轉(zhuǎn)化為其他類型失敗,傳遞的普通參數(shù),默認(rèn)的類型是 String ,后端接收時(shí)根據(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. 傳遞多個(gè)參數(shù)

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

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

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

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

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

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

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

3. 參數(shù)重命名

在上面提到過,前端傳遞的參數(shù)要和后端方法里的參數(shù)保持一致,而前端可能會(huì)傳入各種各樣的參數(shù),比如 userName, productName 等,后端如果只想要一個(gè) name 的話可以對(duì)前端傳遞的參數(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 會(huì)怎么樣呢

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

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

來看 @RequestParam的源碼:

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

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

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

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

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

4. 傳遞數(shù)組

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

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

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

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

5. 傳遞集合

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

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

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

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

原因是發(fā)送上述請(qǐng)求時(shí),默認(rèn)是把請(qǐng)求的參數(shù)封裝成數(shù)組的,并不是一個(gè) 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ù)在鍵值對(duì)(Key/Value)中;
  • 數(shù)據(jù)由逗號(hào) , 分隔;
  • 對(duì)象用 {} 表示;
  • 數(shù)組用 [] 表示;
  • 值可以為對(duì)象,也可以為數(shù)組,數(shù)組中可以包含多個(gè)對(duì)象。

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

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

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

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

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);
        //對(duì)象轉(zhuǎn)JSON
        String s = objectMapper.writeValueAsString(user);
        System.out.println(s);
        //JSON轉(zhuǎn)對(duì)象
        User user1 = objectMapper.readValue(s,User.class);
        System.out.println(user1);
    }
}

6.2. 傳遞 JSON

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

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

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

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

相關(guān)文章

  • springboot整合netty過程詳解

    springboot整合netty過程詳解

    這篇文章主要介紹了springboot整合netty過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java 全排列的幾種實(shí)現(xiàn)方法

    Java 全排列的幾種實(shí)現(xiàn)方法

    本文詳細(xì)介紹了Java中全排列問題的幾種實(shí)現(xiàn)方法,包括回溯法、字典序排列法和迭代法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • 使用Java凍結(jié)Excel行和列的完整指南

    使用Java凍結(jié)Excel行和列的完整指南

    在日常數(shù)據(jù)處理和報(bào)表生成中,Excel 扮演著不可或缺的角色,然而,當(dāng)面對(duì)包含成百上千行、幾十乃至上百列的大型 Excel 文件時(shí),反復(fù)滾動(dòng)查看數(shù)據(jù)往往會(huì)帶來極大的不便,所以本文旨在提供一份清晰、實(shí)用且基于 Java 的解決方案,幫助讀者高效地實(shí)現(xiàn) Excel 行和列的凍結(jié)操作
    2026-02-02
  • SpringBoot整合flyway實(shí)現(xiàn)自動(dòng)創(chuàng)建表的方法

    SpringBoot整合flyway實(shí)現(xiàn)自動(dòng)創(chuàng)建表的方法

    這篇文章主要介紹了SpringBoot整合flyway實(shí)現(xiàn)自動(dòng)創(chuàng)建表的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • 一文教會(huì)你如何從0到1搭建一個(gè)SpringBoot項(xiàng)目

    一文教會(huì)你如何從0到1搭建一個(gè)SpringBoot項(xiàng)目

    今天剛好學(xué)習(xí)到SpringBoot,就順便記錄一下吧,下面這篇文章主要給大家介紹了關(guān)于如何從0到1搭建一個(gè)SpringBoot項(xiàng)目的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Spring boot集成RabbitMQ的示例代碼

    Spring boot集成RabbitMQ的示例代碼

    本篇文章主要介紹了Spring boot集成RabbitMQ的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • Java指令重排序在多線程環(huán)境下的處理方法

    Java指令重排序在多線程環(huán)境下的處理方法

    指令重排在單線程環(huán)境下有利于提高程序的執(zhí)行效率,不會(huì)對(duì)程序產(chǎn)生負(fù)面影響,本文對(duì)多線程指令重排問題進(jìn)行復(fù)原,并針對(duì)指令重排給出相應(yīng)的解決方案,需要的朋友參考下吧
    2022-04-04
  • Mac安裝和配置Java JDK的完整教程

    Mac安裝和配置Java JDK的完整教程

    文章詳細(xì)介紹了Java JDK的相關(guān)知識(shí),包括JDK的定義、核心組成、版本說明、安裝方法、環(huán)境變量配置、常見問題及解決方案,并提供了在Mac上安裝和配置JDK的具體步驟,最后,還給出了后續(xù)學(xué)習(xí)建議,強(qiáng)調(diào)了配置完成后的開發(fā)步驟,需要的朋友可以參考下
    2026-04-04
  • Java實(shí)現(xiàn)文件和base64流的相互轉(zhuǎn)換功能示例

    Java實(shí)現(xiàn)文件和base64流的相互轉(zhuǎn)換功能示例

    這篇文章主要介紹了Java實(shí)現(xiàn)文件和base64流的相互轉(zhuǎn)換功能,涉及Java文件讀取及base64 轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • Java?嵌入數(shù)據(jù)引擎從?SQLite?到?SPL詳解

    Java?嵌入數(shù)據(jù)引擎從?SQLite?到?SPL詳解

    這篇文章主要介紹了Java?嵌入數(shù)據(jù)引擎:從?SQLite?到?SPL,SQLite架構(gòu)簡(jiǎn)單,其核心雖然是C語言開發(fā)的,但封裝得比較好,對(duì)外呈現(xiàn)為一個(gè)小巧的Jar包,能方便地集成在Java應(yīng)用中,本文給大家介紹的非常詳細(xì),需要的朋友參考下
    2022-07-07

最新評(píng)論

泸州市| 青冈县| 宝鸡市| 望城县| 普陀区| 石阡县| 聂荣县| 巴彦县| 广东省| 巴林右旗| 巴林左旗| 莆田市| 保靖县| 贞丰县| 遵化市| 涞水县| 勃利县| 通山县| 乌鲁木齐县| 岱山县| 手游| 辽中县| 凤台县| 济宁市| 来凤县| 虞城县| 邯郸市| 上蔡县| 大冶市| 兴化市| 宁南县| 东港市| 都安| 和硕县| 如皋市| 台北县| 靖西县| 靖西县| 江川县| 永嘉县| 蒲城县|