欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

方法參數屬性params,@PathVariable和@RequestParam用法及區(qū)別

 更新時間:2022年10月24日 14:17:06   作者:流煙默  
這篇文章主要介紹了方法參數屬性params,@PathVariable和@RequestParam用法及區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

【1】params

您可以根據請求參數條件縮小請求映射范圍。

您可以測試是否存在請求參數(myParam),是否缺少一個(!myParam),或針對特定值(myParam=myValue)。

以下示例顯示了如何測試特定值:

@GetMapping(path = "/pets/{petId}", params = "myParam=myValue")?
public void findPet(@PathVariable String petId) {
? ? // ...
}

您還可以將其用于請求頭條件,如下例所示:

@GetMapping(path = "/pets", headers = "myHeader=myValue")?
public void findPet(@PathVariable String petId) {
? ? // ...
}

簡而言之,params是指定request中必須包含某些參數值時,才讓該方法處理。

@RequestMapping(value = "testParamsAndHeaders", params = { "username","age!=10" })
public String testParamsAndHeaders() {
? ? System.out.println("testParamsAndHeaders");
? ? return SUCCESS;
}

params 只是判斷url 或者 form data 中的參數是否復合params的定義,并不會直接綁定數據到方法的參數中,起到一個請求過濾作用。

【2】@PathVariable綁定URL中變量

綁定路徑中的占位符參數到方法參數變量中,只能綁定路徑中的占位符參數,且路徑中必須有參數。無論是 GET 或者POST 只要 URL中有參數即可!

① 前臺實例

  • GET實例
Request URL:http://localhost:8080/SpringMVC-1/springmvc/testPathVariable/1
  • POST 實例
<form action="springmvc/testPathVariable/1" method="POST">
?? ?<input type="text" name="username" value=""/>
?? ?<input type="text" name="age" value=""/>
?? ?<input type="text" name="sex" value=""/>
?? ?<input type="submit" value="submit"/>
</form>

【注意】如果URL中無參數,將會出錯;如果URL有參數,但是沒有使用@PathVariabl該注解,那么URL的參數不會默認與方法參數綁定!方法里的參數會默認綁定表單里面對應的參數!

② 后臺代碼

如果參數名與占位符一致,則可直接使用@PathVariable。如果不一致,則在@PathVariable( )括號內綁定占位符。

@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable("id") Integer id2) {
?? ?System.out.println("testPathVariable: " + id2);
?? ?return SUCCESS;
}

③ 注解源碼

@PathVariable 注解指示方法參數應綁定到URI模板變量。支持@RequestMapping注解的處理程序方法。

如果方法參數類型為java.util.Map Map<String,String>,該方法參數將會被所有路徑變量name-value填充。

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PathVariable {
?? ?@AliasFor("name")
?? ?String value() default "";
?? ? //路徑變量綁定的名稱
?? ?@AliasFor("value")
?? ?String name() default "";
?? ?
?? ? //路徑變量是否必須。默認為true,當路徑變量不存在時拋出異常。
?? ? //如果當路徑變量不存在時,你傾向賦予null或者Java 8的Optional,請設置為false,
?? ? //例如,在一個@ModelAttribute注解的方法處理不同的請求時。
?? ?boolean required() default true;

【3】@RequestParam

@RequestParam注解指示方法參數應綁定web請求參數。

Spring MVC和Spring WebFlux中的注解處理程序方法支持如下:

在SpringMVC中,“request parameters”映射查詢參數、表單數據和multipart requests中的參數。這是因為ServletAPI將查詢參數和表單數據組合到一個a single map called "parameters",其中包括請求body的自動解析。

在Spring WebFlux中,“request parameters”只映射到查詢參數。要在三部分起作用(query parameters, form data,and parts in multipart requests),可以使用數據綁定到用@ModelAttribute注解的命令對象。

如果方法參數類型為Map,并且指定了請求參數名稱,則假設有適當的轉換器可用,則請求參數值將轉換為Map。

如果方法參數為java.util.Map Map<String,String>或org.springframework.util.MultiValueMap MultiValueMap<String,String>,如果未指定參數名,則方法參數Map會被所有的請求參數名-值填充。

① 注解源碼

@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequestParam {
?? ?@AliasFor("name")
?? ?String value() default "";
?? ?//請求參數要綁定的名稱
?? ?@AliasFor("value")
?? ?String name() default "";
/
?? ? //請求參數是否必須,默認為true。如果參數不存在,則拋出異常。
?? ? //你可以選擇設置為false或者給予默認值。
?? ?boolean required() default true;
?? ? //當請求參數不存在或為空時,使用默認值。提供一個默認值將會隱形設置required屬性為false。
?? ?String defaultValue() default ValueConstants.DEFAULT_NONE;
}

② 前臺請求實例

  • GET
<a href="springmvc/testRequestParam?userName=tom&age=11&sex=boy" rel="external nofollow" >
  • POST
<form action="springmvc/testRequestParam" method="POST">
?? ?<input type="text" name="userName" value=""/>
?? ?<input type="text" name="age" value=""/>
?? ?<input type="text" name="sex" value=""/>
?? ?<input type="submit" value="submit"/>
</form>

注意 :

  • GET中的參數形式為:username=tom&age=11&sex=boy
  • POST中的參數形式為:以鍵值對形式保存在form data

③ 后臺代碼

@RequestMapping(value="/regist",produces="application/json;charset=utf-8")
@ResponseBody
public String regist(SysUser sysUser , @RequestParam(required=true,name="sex") String sex){
?? ?String userName = sysUser.getUserName();
?? ?String age = sysUser.getAge();
?? ?//...
?? ?return "regist success";
}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • SpringBoot復雜參數應用詳細講解

    SpringBoot復雜參數應用詳細講解

    我們在編寫接口時會傳入復雜參數,如Map、Model等,這種類似的參數會有相應的參數解析器進行解析,并且最后會將解析出的值放到request域中,下面我們一起來探析一下其中的原理
    2022-09-09
  • java線程池工作隊列飽和策略代碼示例

    java線程池工作隊列飽和策略代碼示例

    這篇文章主要介紹了java線程池工作隊列飽和策略代碼示例,涉及線程池的簡單介紹,工作隊列飽和策略的分析及代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java構造方法有什么作用?

    Java構造方法有什么作用?

    在本篇文章里小編給大家介紹了關于Java構造方法的作用以及相關的基礎知識點,對此有需要的朋友們可以跟著學習下。
    2022-11-11
  • Java基礎教程之類型轉換與多態(tài)

    Java基礎教程之類型轉換與多態(tài)

    這篇文章主要介紹了Java基礎教程之類型轉換與多態(tài),本文講解了 基本類型轉換、 upcast與多態(tài)、 Object類等內容,需要的朋友可以參考下
    2014-09-09
  • springcloud 中 zuul 修改請求參數信息的方法

    springcloud 中 zuul 修改請求參數信息的方法

    這篇文章主要介紹了springcloud 中 zuul 修改請求參數信息的方法,需要的朋友可以參考下
    2018-02-02
  • 詳解Java 10 var關鍵字和示例教程

    詳解Java 10 var關鍵字和示例教程

    在本文中,我將通過示例介紹新的Java SE 10特性——“var”類型。你將學習如何在代碼中正確使用它,以及在什么情況下不能使用它,需要的朋友可以參考下
    2018-10-10
  • Java數據結構之隊列與OJ題

    Java數據結構之隊列與OJ題

    這篇文章主要介紹了Java數據結構之隊列與OJ題,本文章先是對隊列進行介紹,后又介紹了四道OJ相關的題目,來使其深入理解,需要的朋友可以參考下
    2023-01-01
  • java執(zhí)行shell并獲取shell輸出日志方式

    java執(zhí)行shell并獲取shell輸出日志方式

    這篇文章主要介紹了java執(zhí)行shell并獲取shell輸出日志方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • java實現圖片無損任意角度旋轉

    java實現圖片無損任意角度旋轉

    這篇文章主要為大家詳細介紹了java實現圖片無損任意角度旋轉,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • Java for循環(huán)和foreach循環(huán)的性能對比分析

    Java for循環(huán)和foreach循環(huán)的性能對比分析

    這篇文章主要介紹了Java for循環(huán)和foreach循環(huán)的性能對比分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論