07-request 參數(shù)和 controller 方法參數(shù)的綁定對(duì)應(yīng)

主題

  • 如何在SpringMVC controller中獲取請(qǐng)求request 里的參數(shù) request parameter
  • 如何將請(qǐng)求參數(shù)綁定到不同的參數(shù)對(duì)象
  • 如何使用@RequestParam阅爽,并且知曉何時(shí)不需要該注解
  • 以下案例都是get 請(qǐng)求獲取request 參數(shù)
  • 且要明白request上的請(qǐng)求參數(shù) 都是以String形式pass的森书,Spring需要做很多中間處理艾船,將String類型的值轉(zhuǎn)成Controller中你設(shè)定的目的類型

@RequestParam 案例

@Requestparam 注解用來(lái)建立 方法參數(shù)(method param)與請(qǐng)求參數(shù)(request param)的對(duì)應(yīng)關(guān)系

1. 綁定方法參數(shù)與請(qǐng)求參數(shù)的對(duì)應(yīng)關(guān)系
  • url: /books?category=java //參數(shù)category 不可缺
  • Controller 代碼
@RequestMapping("/books")
//@RequestParam("category") 建立 url中 請(qǐng)求參數(shù)-category 和 方法參數(shù)-cat 之間的對(duì)應(yīng)關(guān)系 
//注:當(dāng)請(qǐng)求參數(shù)和方法參數(shù)同名時(shí)捻激,可省略@RequestParam中的value 值-自動(dòng)綁定
public String books(@RequestParam("category") String cat) {
    //bussiness logic
    sout("category " + cat)
    return "book.jsp";
}
2. 自動(dòng)類型轉(zhuǎn)換

當(dāng)Request Param 不是 String類型如而是 number時(shí),我們可自動(dòng)將其轉(zhuǎn)成 number類型的 method 參數(shù)

  • url: /books?rate=5&maxprice=150.55
  • 目的:將rate轉(zhuǎn)成int,將 maxprice 轉(zhuǎn)成 BigDecimal
@RequestParam("category") 
//只需直接指定想要轉(zhuǎn)變成的類型,如 rate 為 int翎卓,maxprice 為 BigDecimal
public String books(@RequestParam("rate") int rate, 
                        @RequestParm("maxprice") BigDecimal maxprice) {
    //bussiness logic
    sout("rate " + rate +", maxprice " + maxprice)
    return "book.jsp";
}
3. request參數(shù)為日期類型
  • url: /books?from=2012-01-12
  • 目的:想傳遞一個(gè)日期類型,且controller自動(dòng)將字符串“2012-01-12” 轉(zhuǎn)成controller方法參數(shù)中日期格式
@RequestMapping("/books")
public String books(@DateTimeFormat(iso = DateTimeFormat.ISO.DATE) 
                    @RequestParam("from") LocalDate from) {
        //首先用 @DateTimeFormat注解摆寄,而且是用其中的ISO.DATE做格式轉(zhuǎn)化, DATE 標(biāo)識(shí):yyyy-MM-dd
        //再用LocalDate格式做參數(shù)失暴,LocalDate 標(biāo)識(shí):year-month-day
        //java.util.Date:年 月 日 hh mm ss
        System.out.println("from " + from);
        return "book.jsp";
    }

4. request 參數(shù)為不必須
  • url: /books?category=math
  • category 不是必須的
@RequestMapping("/books")
public String books(@RequestParam("category", required=false) String cat) {
        //@RequestParam 默認(rèn)required = true坯门,為false時(shí) 該參數(shù)不必須
        System.out.println("category " + cat);
        return "book.jsp";
    }
5. request 自帶默認(rèn)值, 用于以下1/2種場(chǎng)景
  • url1: /books? //輸出:history --category 為 null, required 可以為 false
  • url2: /books?category= //輸出:history --category 為 null
  • url3: /books?category="" // 輸出:""
@RequestMapping("/books")
public String books(@RequestParam("category", defaultValue="history") String cat) {
        System.out.println("category " + cat);
        return "book.jsp";
}
6. @RequestParam 為L(zhǎng)ist or array
  • url: /books?authors=zhangsi&authors=lisi
  • request 中同名的參數(shù)將自動(dòng)轉(zhuǎn)化成 controller 中的@RequestParam List ,必要時(shí)可用 value 屬性指定參數(shù)名
  • 方法參數(shù)寫成 String[] 也可以
@RequestMapping("/books")
public String books(@RequestParam List<String> authors) {
        System.out.println("authors " + authors);
        return "book.jsp";
}
7. @RequestParam 為Map,一個(gè)key 對(duì)應(yīng)一個(gè)value值
  • url: /books?category=math&authors=lisi
  • controller 參數(shù)在這種情況下不能通過(guò) @RequestParam的value指定具體request 參數(shù)名
  • controller參數(shù)類型 為 Map 就出現(xiàn)了一個(gè) 誰(shuí)是 Key逗扒,誰(shuí)是Value的問(wèn)題,這個(gè)是自動(dòng)裝配
  • 根據(jù)requet 參數(shù)請(qǐng)求順序古戴,前面的為 key , 后面的為 value
@RequestMapping("/books")
public String books(@RequestParam Map<String, String> book) {
        
        System.out.println("book " + book);
        return "book.jsp";
}

輸出:{category=math, authors=lisi}
8. @RequestParam 為MultiValueMap,一個(gè)key 對(duì)應(yīng)一個(gè)多個(gè) value 值
  • url: /books?category=math&authors=lisi&authors=zhangsi
  • 參數(shù)同樣具有順序性矩肩,第一個(gè)為key, 其余同名參數(shù)封裝為 value
@RequestMapping("/books")
public String books(@RequestParam MultiValueMap<String, List<String>> book ) {
        
        System.out.println("book " + book);
        return "book.jsp";
}
輸出:{category=[math], authors=[lisi, zhangsi]}
9. 不聲明 @RequestParam
  • url: /books?category=math
  • 默認(rèn) request 和 controller 方法參數(shù)同名现恼,可省略 @RequestParam
@RequestMapping("/books")
public String books(String category) {
        
        System.out.println("category " + category);
        return "book.jsp";
}
輸出:math
建議:指明 @RequestParam
10. request 參數(shù)為field, 而 controller 參數(shù)為 Object
  • url: /books?category=math&author=lisi
  • Object 對(duì)象 封裝了兩個(gè)field: category, author
  • 這個(gè)轉(zhuǎn)換非常有用,尤其是多request 參數(shù)轉(zhuǎn)成封裝對(duì)象時(shí)
  • 注意此時(shí)是無(wú)@RequestParam的蛮拔,有則400

public class Box{
    String category;
    String author;
    getter;
    setter;
    String toString() {
        return "category=" + category +", author=" + author;
    }
}

@RequestMapping("/books")
public String books(Box box ) {
        System.out.println("box " + box);
        return "book.jsp";
}
輸出:category=math, author=lisi
注意
  • 以上 @RequestMapping 省略掉method 屬性述暂,則說(shuō)明所匹配的方法 可以接受任何請(qǐng)求,PUT/GET/DELETE/POST建炫,并非默認(rèn)為GET
  • 當(dāng)method 為 PUT/POST/DELTE時(shí)畦韭,url 中仍可以用"**?name=lisi" 傳遞參數(shù),因?yàn)镻OSTMAN中這些方法沒(méi)有parameter選項(xiàng)肛跌,直接寫在url中即可
參考:https://reversecoding.net/spring-mvc-requestparam-binding-request-parameters/#default-test
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末艺配,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子衍慎,更是在濱河造成了極大的恐慌转唉,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件稳捆,死亡現(xiàn)場(chǎng)離奇詭異赠法,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)乔夯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門砖织,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人末荐,你說(shuō)我怎么就攤上這事侧纯。” “怎么了甲脏?”我有些...
    開(kāi)封第一講書人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵眶熬,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我块请,道長(zhǎng)娜氏,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任墩新,我火速辦了婚禮贸弥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘抖棘。我一直安慰自己茂腥,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布切省。 她就那樣靜靜地躺著最岗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪朝捆。 梳的紋絲不亂的頭發(fā)上般渡,一...
    開(kāi)封第一講書人閱讀 51,698評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音芙盘,去河邊找鬼驯用。 笑死,一個(gè)胖子當(dāng)著我的面吹牛儒老,可吹牛的內(nèi)容都是我干的蝴乔。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼驮樊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼薇正!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起囚衔,我...
    開(kāi)封第一講書人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤挖腰,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后练湿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猴仑,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年肥哎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辽俗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贤姆,死狀恐怖榆苞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情霞捡,我是刑警寧澤坐漏,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站碧信,受9級(jí)特大地震影響赊琳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜砰碴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一躏筏、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呈枉,春花似錦趁尼、人聲如沸埃碱。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)砚殿。三九已至,卻和暖如春芝囤,著一層夾襖步出監(jiān)牢的瞬間似炎,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工悯姊, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留羡藐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓悯许,卻偏偏與公主長(zhǎng)得像仆嗦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子先壕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理欧啤,服務(wù)發(fā)現(xiàn),斷路器启上,智...
    卡卡羅2017閱讀 134,664評(píng)論 18 139
  • iOS網(wǎng)絡(luò)架構(gòu)討論梳理整理中邢隧。。冈在。 其實(shí)如果沒(méi)有APIManager這一層是沒(méi)法使用delegate的倒慧,畢竟多個(gè)單...
    yhtang閱讀 5,193評(píng)論 1 23
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法包券,內(nèi)部類的語(yǔ)法纫谅,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法溅固,線程的語(yǔ)...
    子非魚_t_閱讀 31,639評(píng)論 18 399
  • 今天晚上犯懶了付秕,不想寫點(diǎn)東西了。但是想想自己之前訂過(guò)的目標(biāo)侍郭,所以咬咬牙還是要堅(jiān)持寫一寫吧询吴。 那我們就聊聊堅(jiān)持這件事...
    小城的卡夫卡閱讀 335評(píng)論 0 0
  • 今晚的《哈嘍!葡星人》你有準(zhǔn)時(shí)收看嗎亮元? 這下猛计,故事的幾位主角都到齊了 來(lái)自葡星的我和小Q 整天研究模型的侯燁 武藝...
    葡萄動(dòng)畫閱讀 248評(píng)論 0 0