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)