最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot接收參數(shù)所有方式總結(jié)

 更新時間:2024年07月04日 09:02:42   作者:鞋尖的灰塵  
這篇文章主要介紹了SpringBoot接收參數(shù)所有方式總結(jié),文中通過代碼示例和圖文結(jié)合的方式給大家介紹的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下

方法形參接收參數(shù)【不推薦】

  • 此場景適用于請求參數(shù)比較少的情況
  • Springboot3.2會異常報錯: Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.
  • 解決方案
@RequestMapping("/test1")
public String test1(String name,String age) {
    return String.format("name:%s,age:%s", name, age);
}

以實體類接受參數(shù) 【不推薦】

  • 此場景適用于請求參數(shù)比較多的情況
  @Getter
  @Setter
  public static class DTO {
      private String name;
?
      private Integer age;
  }
?
  @RequestMapping("/test2")
  public String test2(DTO request) {
      return String.format("name:%s,age:%s", request.getName(), request.getAge());
  }

以形參和實體類接受參數(shù) 【不推薦】

  • Springboot3.2會異常報錯: Name for argument of type [java.lang.String] not specified, and parameter name information not available via reflection. Ensure that the compiler uses the '-parameters' flag.
  • 解決方案
  @RequestMapping("/test3")
  public String test3(DTO requestDto,String sex) {
      return String.format("name:%s,age:%s,sex:%s", requestDto.getName(), requestDto.getAge(),sex);
  }

上述三種接受參數(shù)的方式,只能用來獲取query-params,form-data,x-www-form-urlencoded格式數(shù)據(jù)

@PathVariable注解

@PathVariable 注解可用于處理請求 URI 映射中的模板變量,并將其綁定到 Controller 方法參數(shù)

  • 使用 @PathVariable 注解來提取 URI 的模板部分,該部分由變量 {name} 表示
  @RequestMapping("/test4/{name}/{age}")
  public String test4(@PathVariable("name") String name,@PathVariable("age") Integer age) {
      return String.format("name:%s,age:%s", name, age);
  }

  • 指定路徑變量名

    由于方法參數(shù)和路徑變量的名稱相同,可以不用主動設(shè)置模板路徑變量的名稱。如果路徑變量名不同,可以在 @PathVariable 注解的參數(shù)中指定

@GetMapping("/test5/{name}")
public String test4(@PathVariable("name") String id) {
    return String.format("name:%s",id);
}
  • 單個請求中的多個路徑變量
@GetMapping("/test5/{name}/{id}")
public String test5(@PathVariable(value = "name") String name,@PathVariable(value = "id") String id) {
    return String.format("name:%s id:%s", name, id);
}
  • java.util.Map<String, String> 類型的方法參數(shù)來處理多個 `@PathVariable 參數(shù) [不推薦]
@GetMapping("/test5/{name}/{id}")
public String test6(@PathVariable Map<String,String> request) {
    return JSON.toJSONString(request);
}
  • 可選擇的路徑變量
  @RequestMapping(value = {"/test6","test6/{name}/{age}"})
  public String test6(@PathVariable("name") String name,@PathVariable("age") Integer age) {
      return String.format("name:%s,age:%s", name, age);
  }

咋一看,上述 Controller 應(yīng)該可以處理 /test6/test6/smile/32 請求。但是,由于 @PathVariables 所注解的方法參數(shù)默認為必選參數(shù),因此它無法處理 /api/employeeswithrequired 請求

有三種不同的方法來處理這個問題

設(shè)置required為false

  @RequestMapping(value = {"/test6","test6/{name}/{age}"})
  public String test6(@PathVariable(value = "name",required = false) String name,@PathVariable(value = "age",required = false) Integer age) {
      return String.format("name:%s,age:%s", name, age);
  }

使用 java.util.Optional

  @RequestMapping(value = {"/test7","test7/{name}/{age}"})
  public String test7(@PathVariable Optional<String> name,@PathVariable Optional<String> age) {
      return String.format("name:%s,age:%s", name.orElse("null"), age.orElse("null"));
  }

使用 Map<String, String> 類型的方法參數(shù) [不推薦]

  @RequestMapping(value = {"/test8","test8/{name}/{age}"})
  public String test8(@PathVariable Map<String,String> request) {
      return String.format("name:%s,age:%s", request.get("name"), request.get("age"));
  }

@RequestParam

可以使用 @RequestParam 從請求中提取查詢參數(shù)、表單參數(shù)甚至是多個參數(shù)

  • 指定請求參數(shù)名稱

    如果變量名稱和參數(shù)名稱不同,可以使用 name 屬性配置 @RequestParam 名稱:

  @RequestMapping("/test9")
  public String test9(@RequestParam("name") String name,@RequestParam("age") Integer age) {
      return String.format("name:%s,age:%s", name, age);
?
  }

也可以使用 @RequestParam(value = "name") 或直接使用 @RequestParam("name")

  • 可選的請求參數(shù)

    使用 @RequestParam 注解的方法參數(shù)默認為必填參數(shù)。這意味著,如果請求中沒有該參數(shù),就會返回 400 錯誤

    • 可以使用 required 屬性將 @RequestParam 配置為可選參數(shù):
  @RequestMapping("/test10")
  public String test10(@RequestParam(value = "name",required = false) String name,@RequestParam(value = "age",required = false) Integer age) {
      return String.format("name:%s,age:%s", name, age);
  }

如果沒有指定參數(shù),方法參數(shù)將綁定為 null

  • 使用 Java 8 Optional

  @RequestMapping("/test11")
  public String test11(@RequestParam(value = "name") Optional<String> name,@RequestParam(value = "age") Optional<Integer> age) {
      return String.format("name:%s,age:%s", name.orElse(null), age.orElse(null));
  }
  • 在這種情況下,不需要指定 required 屬性。

    如果沒有提供請求參數(shù),則使用默認值:

請求參數(shù)的默認值

還可以使用 defaultValue 屬性為 @RequestParam 設(shè)置默認值

  @RequestMapping("/test12")
  public String test12(@RequestParam(value = "name",defaultValue = "smile") Optional<String> name,@RequestParam(value = "age") Optional<Integer> age) {
      return String.format("name:%s,age:%s", name.orElse(null), age.orElse(null));
  }

與 required=false 類似,用戶不再需要提供參數(shù):

注意,當設(shè)置 defaultValue 屬性時,required 會被被設(shè)置為 false

映射所有參數(shù)

還可以使用 Map 來封裝多個參數(shù),而無需定義它們的名稱(name)或數(shù)量:

  @RequestMapping("/test13")
  public String test13(@RequestParam Map<String,String> request) {
      return String.format("name:%s,age:%s", request.get("name"), request.get("age"));
  }

多值參數(shù)(列表/數(shù)組)

一個 @RequestParam 可以有多個值:

  @RequestMapping("/test14")
  public String test14(@RequestParam("id") List<String> idList) {
      return String.format(JSON.toJSONString(idList));
  }

@RequestBody

將HttpRequest主體映射到方法上實體屬性中

以字符串的方式接收 body 的數(shù)據(jù)

  @PostMapping("/test15")
  public String test15(@RequestBody String requestString) {
      return requestString;
  }

以Map的方式接收body 的數(shù)據(jù)

  @RequestMapping("/test16")
  public String test16(@RequestBody Map<String,Object> requestMap) {
      return String.format(JSON.toJSONString(requestMap));
  }

以實體類的方式接收body 的數(shù)據(jù) 【最常用】

  @RequestMapping("/test17")
  public String test17(@RequestBody DTO requestDto) {
      return String.format(JSON.toJSONString(requestDto));
  }

當body中沒有任何數(shù)據(jù)傳遞時,會拋出異常:Resolved [org.springframework.http.converter.HttpMessageNotReadableException: Required request body is missing: public java.lang.String com.fs.smile.home.controller.RequestController.test16(java.util.Map<java.lang.String, java.lang.Object>)]這種情況,應(yīng)該如何解決

可以使用 required 屬性將 @RequestBody 配置為可選參數(shù)

  @RequestMapping("/test17")
  public String test17(@RequestBody DTO requestDto) {
      return String.format(JSON.toJSONString(requestDto));
  }

使用 Java 8 Optional

在這種情況下,不需要指定 required 屬性

  @RequestMapping("/test18")
  public String test18(@RequestBody Optional<Map<String,Object> > requestMap) {
      return String.format(JSON.toJSONString(requestMap.orElse(null)));
  }

@RequestBody接收數(shù)據(jù)的格式要求

  • Content-Type: application/json
  • Content-Type: application/xml
  • Content-Type: text/plain
  • Content-Type: application/octet-stream

根據(jù)不同的Content-Type等情況,Spring-MVC會采取不同的HttpMessageConverter實現(xiàn)來進行信息轉(zhuǎn)換解析。@RequestBody不能用來處理application/x-www-form-urlencodedmultipart/form-data 格式的請求數(shù)據(jù),如果嘗試使用 @RequestBody 來處理這類請求,通常會遇到 415 Unsupported Media Type 異常。要處理這兩種格式的數(shù)據(jù),應(yīng)該使用 @RequestParam@ModelAttribute 注解

@RequestHeader

RequestHeader主要用來獲取請求當中的請求頭

  • 獲取單個header屬性
  @RequestMapping("/test20")
  public String test20(@RequestHeader("name") String name,@RequestHeader("age") Integer age) {
      return String.format("name:%s,age:%s", name, age);
  }

當header中不存在該參數(shù)時,系統(tǒng)會拋出400的異常,可以參考@PathVariable的處理方案

獲取所有header屬性

@RequestMapping("/test21")
public String test21(@RequestHeader Map<String,String> headers) {
    return String.format("name:%s,age:%s", headers.get("name"), headers.get("age"));
}

獲取header對象

@RequestMapping("/test22")
public String test22(@RequestHeader HttpHeaders headers) {
    return String.format("name:%s,age:%s", headers.get("name"), headers.get("age"));
}

以上就是SpringBoot接受參數(shù)所有方式總結(jié)的詳細內(nèi)容,更多關(guān)于SpringBoot接受參數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java PhantomJs完成html圖片輸出功能

    Java PhantomJs完成html圖片輸出功能

    給大家?guī)硪黄P(guān)于用Java PhantomJs完成html圖片輸出功能的教學內(nèi)容,有興趣的朋友學習參考下吧。
    2017-12-12
  • Apache Calcite進行SQL解析(java代碼實例)

    Apache Calcite進行SQL解析(java代碼實例)

    Calcite是一款開源SQL解析工具, 可以將各種SQL語句解析成抽象語法樹AST(Abstract Syntax Tree), 之后通過操作AST就可以把SQL中所要表達的算法與關(guān)系體現(xiàn)在具體代碼之中,今天通過代碼實例給大家介紹Apache Calcite進行SQL解析問題,感興趣的朋友一起看看吧
    2022-01-01
  • 淺談java面向?qū)ο笾兴姆N權(quán)限

    淺談java面向?qū)ο笾兴姆N權(quán)限

    這篇文章主要介紹了淺談java面向?qū)ο笾兴姆N權(quán)限,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • centos7如何通過systemctl啟動springboot服務(wù)代替java -jar方式啟動

    centos7如何通過systemctl啟動springboot服務(wù)代替java -jar方式啟動

    這篇文章主要介紹了centos7如何通過systemctl啟動springboot服務(wù)代替java -jar方式啟動,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01
  • Java日常練習題,每天進步一點點(37)

    Java日常練習題,每天進步一點點(37)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • ThreadLocal?在上下文傳值場景實踐源碼

    ThreadLocal?在上下文傳值場景實踐源碼

    這篇文章主要為大家介紹了ThreadLocal在上下文傳值場景下的實踐源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • springBoot整合CXF并實現(xiàn)用戶名密碼校驗的方法

    springBoot整合CXF并實現(xiàn)用戶名密碼校驗的方法

    這篇文章主要介紹了springBoot整合CXF并實現(xiàn)用戶名密碼校驗的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • 用Java設(shè)計實現(xiàn)多實例多庫查詢方式

    用Java設(shè)計實現(xiàn)多實例多庫查詢方式

    這篇文章主要介紹了用Java設(shè)計實現(xiàn)多實例多庫查詢方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Spring 父類變量注入失敗的解決

    Spring 父類變量注入失敗的解決

    這篇文章主要介紹了Spring 父類變量注入失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java多線程實現(xiàn)下載圖片并壓縮

    java多線程實現(xiàn)下載圖片并壓縮

    這篇文章主要為大家詳細介紹了java多線程實現(xiàn)下載圖片并壓縮,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05

最新評論

荔浦县| 荔浦县| 原阳县| 铜鼓县| 卓尼县| 陇川县| 武强县| 沙田区| 连江县| 日喀则市| 霍城县| 明星| 万盛区| 乌拉特后旗| 台北市| 天台县| 尖扎县| 黄大仙区| 万盛区| 刚察县| 苗栗县| 吉安县| 商洛市| 建平县| 贵阳市| 于田县| 门头沟区| 铜鼓县| 嵊州市| 周宁县| 西峡县| 九寨沟县| 沈阳市| 措美县| 新竹县| 德格县| 商南县| 余江县| 阿勒泰市| 汶川县| 渭南市|