成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

別不信@PathVariable你真不會用

開發 前端
從Spring的某個版本開始這個后綴已經被聲明過時不建議再使用了,配置文件中對應的參數都刪除了,所以目前你只能通過自定義WebMvcConfigurer方式開啟后綴匹配。

1. 簡介

@PathVariable是Spring MVC中的一個非常重要的注解,作用在于將URL中的模板變量(即路徑變量)綁定到控制器方法的參數上。這一功能特別適用于處理RESTful風格的請求,使得開發者能夠直接從URL中提取參數值,并將其傳遞給方法進行處理。通過使用@PathVariable注解,可以設計出更加靈活和動態的URL映射,同時簡化參數傳遞的過程,提高代碼的可讀性和可維護性。

接下來,我將深入解析@PathVariable注解的多種使用方式,展示其在實際開發中的靈活性和強大功能。看看你都掌握了幾種應用技巧。

2. 實戰案例

2.1 基本使用

為使映射正確工作,捕獲 URI 變量 {id} 的名稱必須與 @PathVariable 成員參數 String id 相同。

@GetMapping("/{id}")
public Object id(@PathVariable Long id) {
  return id ;
}

圖片圖片

如果將參數名修改如下:

@PathVariable Long key

這將導致錯誤

MissingPathVariableException: Required URI template 
  variable 'key' for method parameter type Long is not present]

所以,在這種情況下你參數的名稱要與模板中的一樣。

2.2 不同參數名

我們可以通過將參數傳遞給 @PathVariable 注解,顯式訪問捕獲 URI 變量。

@GetMapping("/{id}")
public Object id(@PathVariable("id") Long key) {
  return key ;
}

通過指明路徑參數名,這樣就不會報錯了。

2.3 類級別的路徑變量

下面的示例展示了如何使用 @PathVariable 在類和方法級別訪問URI 變量。

@RestController
@RequestMapping("/pv/{type}")
public class PathVariableController {


  @GetMapping("/{id}")
  public Object id(@PathVariable Integer type, @PathVariable("id") Long key) {
    return type + "@" +key ;
  }
}

這里的路徑變量type與參數名一致所以不用指定名稱。

2.4 多個URI變量

你也可以定義多個 @PathVariable 注解來訪問捕獲的 URI 變量。

@GetMapping("/{cate}/{id}")
public Object category(@PathVariable String cate, @PathVariable Long id) {
  return cate + "@" + id ;
}

只要你想,只要不超過GET請求大小限制,你可以設置N多的路徑參數。

2.5 Map接收路徑變量

@PathVariable注解還支持Map類型,如下示例:

@GetMapping("/api/{tag}/query/{name}")
public String getByTagAndName(@PathVariable Map<String, String> paths) {
  String tag = paths.get("tag");
  String name = paths.get("name");
  return tag + "@" + name ;
}

圖片圖片

2.6 正則路徑變量

@GetMapping("/vk/api/{name:[a-z]+}")
public String getJarFile(@PathVariable String name) {
  return name ;
}

該路徑將只會匹配最后的name為a~z組合的字符。

2.7 可選的路徑變量

默認情況下@PathVariable路徑變量是必須,否則服務端將MethodArgumentTypeMismatchException異常。我們除了可以通過設置PathVariable注解的required屬性為false外,還可以通過Optional類型接收值,如下示例:

@GetMapping({"/users/{id}", "/users/"})
public Object byId(@PathVariable Optional<Long> id) {
  return id.orElseGet(() -> -1L) ;
}

匹配兩個路徑,沒有id則返回-1。

2.8 路徑后綴

關于路徑后綴匹配,當你在應用中開啟了后綴匹配時,如果路徑參數中有后綴那么得到的結果將不會是你期望的,如下示例:

@GetMapping("/ext/api/{file}")
public Object fileExt(@PathVariable String file) {
  return new R(file) ;
}

請求結果:

圖片圖片

最終得到的值沒有后綴,對于這種情況,你需要使用正則的方式處理,如下:

@GetMapping("/ext/api/{file:.+}")
public Object fileExt(@PathVariable String file)

通過這種方式后,你將會得到完整的后綴信息。

注:從Spring的某個版本開始這個后綴已經被聲明過時不建議再使用了,配置文件中對應的參數都刪除了,所以目前你只能通過自定義WebMvcConfigurer方式開啟后綴匹配。

2.9 在非Controller中取得路徑變量

通常請求的路徑變量是在Controller層被捕獲并處理的。如果你希望在Service層或其他非Controller組件中獲取這些路徑變量,而不是通過參數傳遞的方式,你則可以通過如下的方式。

private HttpServletRequest request ;
public void uriVar() {
  Map<String, String> vars = (Map<String, String>)request
    .getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE) ;
}

這將獲取所有的路徑變量數據。

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2021-03-16 15:12:57

CompletableFuture機制java

2020-09-01 14:17:03

WindowsDefender微軟

2020-05-14 08:59:28

API網關性能

2022-02-22 08:25:51

typeScript泛型概念泛型使用

2020-09-27 06:50:56

Java互聯網注解

2019-09-03 09:30:46

ss 命令SocketLinux

2024-09-09 08:36:36

Java操作遠程服務器

2020-12-18 09:45:33

DockerLinux命令

2020-08-26 14:40:38

explainMySQL數據庫

2020-11-09 09:03:35

高并發多線程ThreadLocal

2020-03-10 08:33:04

HTTP演變協議

2012-05-02 15:38:49

金山快盤網盤

2022-08-12 15:58:34

Docker

2019-11-28 16:48:00

華為Mate X

2020-10-21 10:02:16

架構運維技術

2018-09-13 10:40:40

Linux命令find

2020-12-07 09:15:00

JavaScript數組 reduce

2015-04-14 10:54:34

Mac快捷鍵

2019-12-19 09:08:42

HTTP瀏覽器緩存

2020-09-21 10:50:24

Java多線程代碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产一区二区在线播放 | 黄色av网站免费看 | 欧美精品一区二区三区在线播放 | 精品中文字幕一区二区 | 欧美日韩中文在线观看 | 在线色网 | 激情一区二区三区 | 亚洲 欧美 日韩 在线 | www久久久 | 性色网站| 亚洲视频三区 | 免费视频二区 | 欧美国产视频 | 综合久| 91一区二区三区 | 欧美一区2区三区3区公司 | 精品国产一区一区二区三亚瑟 | 国产欧美日韩一区 | 亚洲精品不卡 | 在线观看h视频 | 国产精品免费一区二区三区四区 | 欧美成人猛片aaaaaaa | www视频在线观看 | 亚洲一区中文 | 国产一区二区高清在线 | 久久久久久久久久久久久久久久久久久久 | 亚洲精品二区 | 国产精品国产成人国产三级 | 欧美性大战xxxxx久久久 | 亚洲精品久久久久久久不卡四虎 | 永久av| 国产一区二区三区四区 | 91中文字幕在线观看 | 国产区精品视频 | 久久性色 | 天天躁天天操 | 欧美亚洲国产日韩 | 精品一区二区久久 | h视频在线播放 | 日本中文字幕在线观看 | 亚洲欧美日韩一区二区 |