您好,登錄后才能下訂單哦!
前面的章節,有提到可以通過@PathVariable注解來映射restful風格的url中的值到方法中去,本章就看看如果不使用restful風格的url來怎么進行參數的傳遞。
RequestParam就是來實現參數傳遞的,能夠把用戶的輸入綁定到后臺的方法上面。它有三個主要的屬性:
value:定義參數的名稱
required:定義參數是否是必須的,默認是true
defaultValue:定義參數的默認值
下面結合具體的示例代碼來看一下如何使用:
1、下面的這段代碼定義了三個參數,一個name,一個sex,一個age,可以看出來以下兩種方式是等價的,它們的作用是一樣的
@RequestParam("name") String userName @RequestParam(value = "name") String userName
2、參數的綁定是name,而不是userName,即如果傳遞的參數名稱為userName,那么就不能接收到參數
@RequestMapping("/testReqParam") public String testRequestParam(@RequestParam("name") String userName, @RequestParam("sex") String sex, @RequestParam(value = "age") int age, Model model) { model.addAttribute("name", userName); model.addAttribute("sex", sex); model.addAttribute("age", age); return "result"; }
測試代碼:下面定義了三個請求,第一個完整參數,get請求,第二個完整參數post請求,第三個缺少參數age。前兩個都會成功,最后一個會404的,因為required的默認值是true
<p>RequestParam測試,get請求形式 <a href="/testRequestParam/testReqParam?name=lxy&sex=male&age=15">here</a> </p> <form action="/testRequestParam/testReqParam" method="post"> <p>post請求形式</p> name:<input type="text" name="name" value=""/><br/> sex:<input type="text" name="sex" value=""/><br/> age:<input type="text" name="age" value=""/><br/> <input type="submit" value="submit" /> </form> <p>RequestParam測試,get請求形式,缺少age參數,出現404 <a href="/testRequestParam/testReqParam?name=lxy&sex=male">here</a> </p>
3、required屬性定義,直接這么定義會不會出問題,答案是會的,會出現500錯誤。為什么?因為age參數是null,在spring mvc在進行類型轉換的時候,null不能轉為int類型,那要怎么辦呢?
@RequestMapping("/testAttrRequired500Error") public String testAttrRequired500Error(@RequestParam("name") String userName, @RequestParam("sex") String sex, @RequestParam(value = "age", required = false) int age, Model model) { model.addAttribute("name", userName); model.addAttribute("sex", sex); model.addAttribute("age", age); return "result"; }
這一段代碼把int修改為了Integer,此時無論是否缺少age參數都是可以成功的。
@RequestMapping("/testAttrRequired") public String testAttrRequired(@RequestParam("name") String userName, @RequestParam("sex") String sex, @RequestParam(value = "age", required = false) Integer age, Model model) { model.addAttribute("name", userName); model.addAttribute("sex", sex); model.addAttribute("age", age); return "result"; }
測試代碼
<p>required屬性設為false,500錯誤的定義形式,參數轉化錯誤 <a href="/testRequestParam/testAttrRequired500Error?name=lxy&sex=male">here</a> </p> <p>required屬性設為false,缺少參數age 不會出錯,因為定義類型為Integer <a href="/testRequestParam/testAttrRequired?name=lxy&sex=male">here</a> </p>
4、defaultValue的使用,定義參數的默認是,如果沒有傳遞該參數,使用此處定義的,此時即使缺少age參數,也不會出現錯誤了,因為會使用0來作為age的值。
@RequestMapping("/testAttrDefaultValue") public String testAttrDefaultValue(@RequestParam("name") String userName, @RequestParam("sex") String sex,@RequestParam(value = "age", required = false, defaultValue = "0") int age, Model model) { model.addAttribute("name", userName); model.addAttribute("sex", sex); model.addAttribute("age", age); return "result"; }
測試代碼
<p>required屬性設為false,設置defaultValue為0,缺少age參數也不會出錯, 因為給定了一個默認值,按照該值進行轉換 <a href="/testRequestParam/testAttrDefaultValue?name=lxy&sex=male">here</a> </p>
5、RequestHeader和CookieValue的使用,不太會用到,和RequestParam用法一致,示例代碼如下所示:
/** * 注解 @RequestHeader 可以定義獲取請求頭的信息 * 注解 @CookieValue 可以定義獲取請求的cookie中的值 */ @RequestMapping("/testRequestHeaderAndCookieValue") public String testRequestHeader(@RequestHeader("Accept-Language") String language, @CookieValue("JSESSIONID") String sessionId, Model model) { System.out.println("header:" + language + "\tsessionId:" + sessionId); return "result"; }
測試代碼:
<p>@RequiredHeader和@CookieValue的使用說明: <a href="/testRequestParam/testRequestHeaderAndCookieValue">here</a> </p>
項目源代碼:
https://git.oschina.net/acesdream/spring-mvc
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。