@RequestParam 和 @PathVariable 註解是用於從request中接收請求的,兩個都可以接收引數,關鍵點不同的是@RequestParam 是從request裡面拿取值,
而 @PathVariable 是從一個URI模板裡面來填充
一、@PathVariable 的使用
PathVariable 有三個參數方法可用
name-要绑定到的路徑變量的名稱
required-指示是否為必需參數
value-名稱的别名(做用跟name一樣)
二、@PathVariable的參數 name 及 value測試
pathVariableTest1 :
@PathVariable不指定name 及 value,使用預設的參數名稱。
{id}的id ,需要跟String id的id 一樣。
@GetMapping("/test1/{id}")
public String pathVariableTest1( @PathVariable String id) {
pathVariableTest2 :
@PathVariable(name="id")指定name ,對應到Mapping的{id}
@GetMapping("/test2/{id}")
public String pathVariableTest2( @PathVariable(name="id") String bookId) {
pathVariableTest3 :
@PathVariable(value="id")指定value ,對應到Mapping的{id}
@GetMapping("/test3/{id}")
public String pathVariableTest3( @PathVariable(value="id") String bookId) {
圖2
測試 pathVariableTest1
http://localhost:8080/books/test1/123
圖3
測試 pathVariableTest3
http://localhost:8080/books/test2/123
圖4
測試 pathVariableTest3
http://localhost:8080/books/test3/123
圖5
三、 @PathVariable的參數 required 設定參數是否為必需
required 不設定預設為true
true為必需的,false則非必需的。
本文測試 name 為必需, id 非必需的
案例如下:
@GetMapping(value={"/test4/{name}","/test4/{name}/{id}"})
public String pathVariableTest4(@PathVariable String name, @PathVariable(required = false) String id) {
圖7 測試 pathVariableTest4 http://localhost:8080/books/test4/java
圖8 測試 pathVariableTest4 http://localhost:8080/books/test4/java/123456
四、 @PathVariable的多參數應用
可以多參數,本文測試二個測試。
可用符號分開如:/test5/{id}-{name}-{price}"
@GetMapping("/test5/{id}-{name}-{price}")
public String pathVariableTest5( @PathVariable(value="id") String bookId,
@PathVariable String name,
@PathVariable String price) {
大多專案會使用如下:
@GetMapping("/test6/{id}/{name}/{price}")
public String pathVariableTest6( @PathVariable(value="id") String bookId,
@PathVariable String name,
@PathVariable String price) {
圖9 程式
圖10 測試 http://localhost:8080/books/test6/123456-java-123
圖11 測試 http://localhost:8080/books/test6/123456/java/123
五、@PathVariable 將參數轉為 map 應用
使用測試程式如下:
@GetMapping(value = "/test8/{id}/{name}")
public String pathVariableTest8(@PathVariable Map<String, String> bookMsp) {
圖12 程式
圖13 測試 http://localhost:8080/books/test8/123456/java
六、@RequestParam 的使用
使用@RequestParam ,URL是這樣的:http://host:port/path?參數名1=參數值1&參數名2=參數值2
@RequestParam 有四個參數方法可以 value 、 name 、required、defaultValue
value 、 name 、required 方法跟 @PathVariable功能一樣。
defaultValue 當 required 為false時,給預設值的設定。
圖14
程式:
@GetMapping("/test10/list")
public String requestParamTest10(@RequestParam String name, @RequestParam String id) {
圖16 測試 http://localhost:8080/books/test10/list?name=test&id=123
七、@RequestParam 的參數放入request body裡傳送
在網頁上會有表單,會使用html form submit的。
而傳送資料就是放入request body裡。
本文使用psot來測試
@PostMapping("/test11/list")
public String requestParamTest11(@RequestParam String name, @RequestParam String id) {
圖17
使用post
圖18
使用get
圖19 測試 http://localhost:8080/books/test10/list
八、同一個方法使用 @PathVariable 跟 @RequestParam
是可以的。
程式:
@GetMapping("/test12/{id}/{name}")
public String pathVariableTest12(@PathVariable(value = "id") String bookId,
@PathVariable String name,
@RequestParam String price) {
圖20
圖21
九、測試@RequestParam 的 defaultValue
當 required 為false時,給預設值的設定。
程式:
@GetMapping("/test13/{id}/{name}")
public String pathVariableTest13(@PathVariable(value = "id") String bookId,
@PathVariable String name,
@RequestParam(required=false,defaultValue="99") String price) {
圖22 設定 price 非必要參數 如果沒給值,就用預設值
圖23 price 參數傳入12
圖24 取消 price 傳入值
用LINE傳送分享
其它文章
沒有留言:
張貼留言