一篇文章搞定SpringMVC參數(shù)綁定

SpringMVC參數(shù)綁定萄金,簡(jiǎn)單來(lái)說(shuō)就是將客戶端請(qǐng)求的key/value數(shù)據(jù)綁定到controller方法的形參上畅厢,然后就可以在controller中使用該參數(shù)了

下面通過(guò)5個(gè)常用的注解演示下如何進(jìn)行參數(shù)綁定:

1. @PathVariable注解

@PathVariable 是用來(lái)獲得請(qǐng)求url中的動(dòng)態(tài)參數(shù)的肝箱,可以將URL中的變量映射到功能處理方法的參數(shù)上擅编,其中URL 中的 {xxx} 占位符可以通過(guò)@PathVariable(“xxx“) 綁定到操作方法的入?yún)⒅小?/p>

示例代碼:

@ResponseBody

@RequestMapping("/testUrlPathParam/{param1}/{param2}")

publicvoidtestUrlPathParam(HttpServletRequest?request,?@PathVariable?String?param1,

@PathVariable?String?param2)?{

System.out.println("通過(guò)PathVariable獲取的參數(shù)param1="?+?param1);

System.out.println("通過(guò)PathVariable獲取的參數(shù)param2="?+?param2);

}

Postman發(fā)送請(qǐng)求截圖:

發(fā)送請(qǐng)求截圖

輸出結(jié)果:

通過(guò)PathVariable獲取的參數(shù)param1=1

通過(guò)PathVariable獲取的參數(shù)param2=2

2.@RequestHeader注解

@RequestHeader 注解押逼,可以把Request請(qǐng)求header部分的值綁定到方法的參數(shù)上申尼。

示例代碼:

@ResponseBody

@RequestMapping("/testHeaderParam")

publicvoidtestHeaderParam(HttpServletRequest?request,?@RequestHeader?String?param1)?{

System.out.println("通過(guò)RequestHeader獲取的參數(shù)param1="?+?param1);

}

Postman發(fā)送請(qǐng)求截圖:

發(fā)送請(qǐng)求截圖

輸出結(jié)果:

通過(guò)RequestHeader獲取的參數(shù)param1=abc

3.@CookieValue注解

@CookieValue 可以把Request header中關(guān)于cookie的值綁定到方法的參數(shù)上祭阀。

示例代碼:

@ResponseBody

@RequestMapping("/testCookieParam")

publicvoidtestCookieParam(HttpServletRequest?request,?HttpServletResponse?response,

@CookieValue?String?sessionid)?{

System.out.println("通過(guò)CookieValue獲取的參數(shù)sessionid="?+?sessionid);

}

Postman發(fā)送請(qǐng)求截圖:

發(fā)送請(qǐng)求截圖

輸出結(jié)果:

通過(guò)CookieValue獲取的參數(shù)sessionid=ebef978eef6c46f8a95cc0990d2d360a

4.@RequestParam注解

@RequestParam注解用來(lái)處理Content-Type: 為 application/x-www-form-urlencoded編碼的內(nèi)容鹉戚。提交方式為get或post。(Http協(xié)議中专控,form的enctype屬性為編碼方式抹凳,常用有兩種:application/x-www-form-urlencoded和multipart/form-data,默認(rèn)為application/x-www-form-urlencoded)伦腐;

@RequestParam注解實(shí)質(zhì)是將Request.getParameter() 中的Key-Value參數(shù)Map利用Spring的轉(zhuǎn)化機(jī)制ConversionService配置赢底,轉(zhuǎn)化成參數(shù)接收對(duì)象或字段,

get方式中queryString的值,和post方式中body data的值都會(huì)被Servlet接受到并轉(zhuǎn)化到Request.getParameter()參數(shù)集中幸冻,所以@RequestParam可以獲取的到粹庞;

該注解有三個(gè)屬性: value、required洽损、defaultValue庞溜; value用來(lái)指定要傳入值的id名稱,required用來(lái)指示參數(shù)是否必錄碑定,defaultValue表示參數(shù)不傳時(shí)候的默認(rèn)值强缘。

示例代碼:

@ResponseBody

@RequestMapping("/testRequestParam")

publicvoidtestRequestParam(HttpServletRequest?request,

@RequestParam(value?="num",?required?=true,?defaultValue?="0")int?num)?{

System.out.println("通過(guò)RequestParam獲取的參數(shù)num="?+?num);

}

Postman發(fā)送請(qǐng)求截圖:

輸出結(jié)果:

通過(guò)RequestParam獲取的參數(shù)num=10

5.@RequestBody注解

@RequestBody注解用來(lái)處理HttpEntity(請(qǐng)求體)傳遞過(guò)來(lái)的數(shù)據(jù),一般用來(lái)處理非Content-Type: application/x-www-form-urlencoded編碼格式的數(shù)據(jù)不傅;

GET請(qǐng)求中旅掂,因?yàn)闆](méi)有HttpEntity,所以@RequestBody并不適用访娶;

POST請(qǐng)求中商虐,通過(guò)HttpEntity傳遞的參數(shù),必須要在請(qǐng)求頭中聲明數(shù)據(jù)的類(lèi)型Content-Type崖疤,SpringMVC通過(guò)使用HandlerAdapter配置的HttpMessageConverters來(lái)解析HttpEntity中的數(shù)據(jù)秘车,然后綁定到相應(yīng)的bean上。

示例代碼:

@ResponseBody

@RequestMapping("/testRequestBody")

publicvoidtestRequestBody(HttpServletRequest?request,?@RequestBody?String?bodyStr){

System.out.println("通過(guò)RequestBody獲取的參數(shù)bodyStr="?+?bodyStr);

}

Postman發(fā)送請(qǐng)求截圖:

發(fā)送請(qǐng)求截圖

代碼運(yùn)行結(jié)果:

通過(guò)RequestBody獲取的參數(shù)bodyStr=這是body的內(nèi)容

下面的是我的公眾號(hào)二維碼圖片劫哼,歡迎關(guān)注叮趴,歡迎留言,一起學(xué)習(xí)权烧,一起進(jìn)步眯亦。

Java碎碎念公眾號(hào)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市般码,隨后出現(xiàn)的幾起案子妻率,更是在濱河造成了極大的恐慌,老刑警劉巖板祝,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宫静,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡券时,警方通過(guò)查閱死者的電腦和手機(jī)孤里,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)橘洞,“玉大人捌袜,你說(shuō)我怎么就攤上這事≌痖荩” “怎么了琢蛤?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵蜓堕,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我博其,道長(zhǎng)套才,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任慕淡,我火速辦了婚禮背伴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘峰髓。我一直安慰自己傻寂,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布携兵。 她就那樣靜靜地躺著疾掰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪徐紧。 梳的紋絲不亂的頭發(fā)上静檬,一...
    開(kāi)封第一講書(shū)人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音并级,去河邊找鬼拂檩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛嘲碧,可吹牛的內(nèi)容都是我干的稻励。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼愈涩,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼望抽!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起钠署,我...
    開(kāi)封第一講書(shū)人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤糠聪,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后谐鼎,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡趣惠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年狸棍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片味悄。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡草戈,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出侍瑟,到底是詐尸還是另有隱情唐片,我是刑警寧澤丙猬,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站费韭,受9級(jí)特大地震影響茧球,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜星持,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一抢埋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧督暂,春花似錦揪垄、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至八回,卻和暖如春肪凛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辽社。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工伟墙, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人滴铅。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓戳葵,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親汉匙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子拱烁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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