java
咱們還能夠經過如HttpServletRequest 等API 獲得請求數據,但推薦使用註解方式,由於使用起來更簡單。咱們須要首先看看功能處理方法支持哪些類型的形式參數,以及他們的具體含義。
一、@RequestParam綁定單個請求參數值;數組
二、@PathVariable綁定URI 模板變量值;安全
三、@CookieValue綁定Cookie 數據值session
四、@RequestHeader綁定請求頭數據;app
五、@ModelAttribute綁定參數到命令對象;ui
六、@SessionAttributes綁定命令對象到session;url
@RequestParam綁定單個請求參數值
public String requestparam(@RequestParam("username") String username)
@RequestParam註解主要有哪些參數
value:參數名字,即入參的請求參數名字,如username 表示請求的參數區中的名字爲username 的參數的值將傳入;
required:是否必須,默認是true,表示請求中必定要有相應的參數,不然將報404 錯誤碼;
defaultValue:默認值,表示若是請求中沒有同名參數時的默認值spa
public String requestparam(@RequestParam(value="username「,required=false) String username)
表示請求中能夠沒有名字爲username 的參數,若是沒有默認爲null,此處須要注意以下幾點:原子類型:必須有值,不然拋出異常,若是容許空值請使用包裝類代替。Boolean 包裝類型類型:默認Boolean.FALSE,其餘引用類型默認爲null。
對於多個同名請求參數的處理,
例如:url?role=admin&role=user
public String requestparam(@RequestParam(value=「role」) String roles)
實際獲得的值是roles=「admin,user」。多個值以逗號的方式隔開
或者把方法參數定義爲字符串數組(String[] roles)或集合(List<String> roles)線程
@PathVariable綁定URI 模板變量值
@RequestMapping(value="/users/{userId}/topics/{topicId}")public String test(@PathVariable(value="userId") intuserId, @PathVariable(value="topicId") inttopicId)
如請求的URL 爲「控制器URL/users/123/topics/456」,則自動將URL 中模板變量{userId}和{topicId} 綁定到經過@PathVariable註解的同名參數上,即入參後userId=12三、topicId=456。code
@CookieValue綁定Cookie 數據值
public String test(@CookieValue(value="JSESSIONID", defaultValue="") String sessionId)
傳入參數類型也能夠是javax.servlet.http.Cookie類型。public String test2(@CookieValue(value="JSESSIONID", defaultValue="") Cookie sessionId)
@RequestHeader綁定請求頭數據
@RequestMapping(value="/header")public String test(@RequestHeader("User-Agent") String userAgent,@RequestHeader(value="Accept") String[] accepts)
@ModelAttribute綁定請求參數到Model
@ModelAttribute一個具備以下三種使用方式:
做用在方法參數裏面:用於將多個請求參數綁定到一個命令對象,從而簡化綁定流程,並且自動暴露爲模型數據用於視圖頁面展現時使用;
做用在通常方法上面:該Controller的全部方法在調用前,先執行此@ModelAttribute方法;
做用於方法的返回值上面:放在功能處理方法的返回值上時,是暴露功能處理方法的返回值爲模型數據,用於視圖頁面展現時使
public String findUser(@ModelAttribute("user") UserModel user) @ModelAttribute("cityList")public List<String> cityList() { return Arrays. asList("北京", "山東"); } public @ModelAttribute(「user」) UserModel findUser(@ModelAttribute(「user2」) UserModel user)
注:返回值上的user會覆蓋方法參數上的user2做爲視圖的模型名
匿名綁定
public String findUser(@ModelAttribute UserModel user)
Spring Web MVC 會自動將簡單類名(首字母小寫)做爲名字暴露對於集合類型(Collection 接口的實現者們,包括數組),生成的模型對象屬性名爲「簡單類名(首字母小寫)」+「 List」
@SessionAttributes綁定對象到session 在控制器上加入@SessionAttributes(value = { 「user」}) @SessionAttributes(value = { 「user」}) public class SessionAttributeController調用SessionStatus對象的setComplete()銷燬當前控制器上使用的Session @RequestMapping("/session2") public String session(@ModelAttribute("user") UserModeluser, SessionStatusstatus) {status.setComplete();return "success";}