您好,登錄后才能下訂單哦!
在MVC結(jié)構(gòu)中,控制器組件主要的功能就是接收請(qǐng)求、處理請(qǐng)求、生成響應(yīng),接收客戶端傳來的請(qǐng)求參數(shù)的往往是控制器要做的第一件事。
Book實(shí)體類Book.java
public class Book { private Integer bookId; private String author; //生成Get、Set方法,此處省略 }
一、直接用參數(shù)名匹配請(qǐng)求參數(shù)
客戶端界面(表單):
<form action="/queryString" method="post"> <input type="text" name="bookId"> <input type="text" name="author"> <input type="submit" value="提交"> </form>
controller層:
@Controller public class ParamPassDemo { @RequestMapping(value="/queryString") public String test1(Integer bookId, String author) { System.out.println("bookId="+bookId+", author="+author); //此處返回的地址為(/WEB-INF/jsp/index.jsp) return "index"; } }
注意:這里@RequestMapping中只有value屬性,value可以省略不寫。
客戶端輸入:123,Rose
控制臺(tái)輸出:bookId=123, author=Rose
二、通過@RequestParam注解來指定請(qǐng)求參數(shù)的name
客戶端界面(表單):
<form action="/queryStringWithSpecName" method="post"> <input type="text" name="bookId" value="321"> <input type="text" name="author" value="Jack"> <input type="submit" value="提交"> </form>
如果表單中的字段與方法中的參數(shù)名一致,可以不需要@RequestParam,Spring會(huì)自動(dòng)處理。
controller層:
@Controller public class ParamPassDemo { @RequestMapping("/queryStringWithSpecName") public String test2((value="bookId",required=false) Integer id, @RequestParam("author") String name) { System.out.println("bookId="+id+", author="+name); return "index"; } }
注意:這里@RequestMapping中有兩個(gè)屬性,value不能省略。
@RequestParam將請(qǐng)求地址中的參數(shù)傳遞給目標(biāo)方法,在處理方法入?yún)⑻幨褂每梢园颜?qǐng)求參數(shù)傳遞給請(qǐng)求方法。
當(dāng)使用@RequestParam注解時(shí),設(shè)置客戶端傳遞的請(qǐng)求參數(shù)name="bookId"和@RequestParam的value值value="bookId"相匹配后,參數(shù)名int id可以和請(qǐng)求參數(shù)不匹配。
客戶端輸入:321, Jack
控制臺(tái)輸出:bookId=321, author=Jack
客戶端界面(ajax):
<button onclick="clickMe()">點(diǎn)我</button> <script> function clickMe() { $.ajax({ type : 'POST', url : "/queryStringWithSpecName", data : { "bookId" : 1, "author" : "Jack" }, }); } </script>
controller層:(不變)
客戶端: data:{"author" : "Jack"}
控制臺(tái)輸出: bookId=null, author=Jack(如果bookId為int類型,控制臺(tái)會(huì)拋出異常)
客戶端: data:{"bookId" : 1}
控制臺(tái)輸出: org.springframework.web.bind.MissingServletRequestParameterException: Required String parameter 'author' is not present
通過required設(shè)置可選參數(shù),required為false時(shí)表示可以不帶參數(shù),為true時(shí)表示必須帶參數(shù)(默認(rèn)值為true)。
當(dāng)可選參數(shù)不存在時(shí),Spring默認(rèn)將其賦值為空(null),但由于bookId已定義為基本類型int,所以賦值會(huì)失敗。解決方法:采用int包裝類Integer。
三、使用領(lǐng)域?qū)ο髞斫邮諈?shù)
客戶端界面(表單):
<form action="/queryStringWithDomainObj" method="post"> <input type="text" name="bookId"> <input type="text" name="author"> <input type="submit" value="提交"> </form>
controller層:
@Controller public class ParamPassDemo { @RequestMapping("/queryStringWithDomainObj") public String test3(Book book) { System.out.println("bookId="+book.getBookId()+", author="+book.getAuthor()); return "index"; } }
客戶端輸入:111, Bob
控制臺(tái)輸出:bookId=111, author=Bob
四、URL動(dòng)態(tài)參數(shù)傳遞(路徑參數(shù))
客戶端界面(超鏈接):
<a href="/book/1" rel="external nofollow" >testPathVariable</a>
controller層:
@Controller public class ParamPassDemo { //@PathVariable可以用來映射URL中的占位符到目標(biāo)方法的參數(shù)中 @RequestMapping("/book/{bookId}") public String test4(@PathVariable("bookId") Integer bookId) { System.out.println("bookId:" + bookId); return "index"; } }
控制臺(tái)輸出:bookId:1
@PathVariable 映射 URL 綁定的占位符
通過 @PathVariable 可以將 URL 中占位符參數(shù)綁定到控制器處理方法的入?yún)⒅校篣RL 中的 {xxx} 占位符可以通過@PathVariable(“xxx“) 綁定到操作方法的入?yún)⒅小?/p>
五、使用HttpServletRequest獲取請(qǐng)求參數(shù)
客戶端界面(表單):
<form action="/queryBook" method="post"> <input type="text" name="bookId"> <input type="text" name="author"> <input type="submit" value="提交"> </form>
controller層:
@Controller public class ParamPassDemo { @RequestMapping("/queryBook") public String test5(HttpServletRequest request) { System.out.println("bookId:" + request.getParameter("bookId")); //此處index.jsp界面在WEB-INF下 return "redirect:/index.jsp"; } }
客戶端輸入:123
控制臺(tái)輸出:用戶id:123
六、跳轉(zhuǎn)到另一個(gè)controller方法
客戶端界面(url地址欄):http://localhost:8080/test6?bookId=321
controller層:
@Controller public class ParamPassDemo { @RequestMapping("/test6") public String test6(String bookId){ System.out.println("bookId="+bookId); //使用服務(wù)端跳轉(zhuǎn)的方式轉(zhuǎn)向到另一個(gè)controller //return "forward:queryBook?bookId="+bookId; return "redirect:queryUser?bookId="+bookId; } }
控制臺(tái)輸出:bookId=321 bookId:321
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。