如何替換@PathVariable中的變量
替換@PathVariable的變量
因為要對接口進行統計, 而項目中用到瞭@PathVariable的註解, 也就是uri中攜帶請求參數的方式. 導致一個接口統計出來很多個請求, 比如 /api/get/1, /api/get/2 …
在網上找到可以通過
Map<String, String> pathVariables = (Map) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE);
拿到這個PathVariable參數. 於是初步代碼如下, 將/api/get/{id} 這個變量替換成常量{x}.
import com.google.common.base.Joiner; import javax.servlet.*; /** * 獲取 去除掉 PathVariable 後的uri * @param request * @return */ private String getPureUri(HttpServletRequest request) { String url = request.getRequestURI(); Map<String, String> pathVariables = (Map) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE); if (pathVariables != null && !pathVariables.isEmpty()){ String[] split = url.split("/"); for (String pathVal : pathVariables.values()) { for (int i = split.length - 1; i >= 0; i--) { if (split[i].equals(pathVal)){ //替換成{x},也可以直接替換成""去掉 split[i] = "{x}"; break; } } } url = Joiner.on("/").join(split); } return url; }
@pathvariable註解的使用
帶占位符的 URL 是 Spring3.0 新增的功能,該功能在SpringMVC 向 REST 目標挺進發展過程中具有裡程碑的意義。
通過 @PathVariable 可以將 URL 中占位符參數綁定到控制器處理方法的入參中:URL 中的 {xxx} 占位符可以通過
@PathVariable(“xxx”) 綁定到操作方法的入參中。
//@GetMapping是一個組合註解,是@RequestMapping(method = RequestMethod.GET)的縮寫 @GetMapping("/getUserById/{id}") public User getUser(@PathVariable("id") Long userId){ return userService.selectUserById(userId); }
不需要使用問號傳參,不需要寫key=valuel,直接寫value即可.
若方法參數名稱和需要綁定的uri template中變量名稱一致時,可以簡寫:
//@GetMapping是一個組合註解,是@RequestMapping(method = RequestMethod.GET)的縮寫。 @GetMapping("/getUserByName/{userName}") public User getUserByName(@PathVariable String userName){ return userService.selectUserByUserName(userName); }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- spring mvc中@PathVariable / 帶斜杠方式獲取
- 使用Spring Boot實現操作數據庫的接口的過程
- @PathVariable註解,讓spring支持參數帶值功能的案例
- Spring中的PathVariable註釋解析
- RestFul風格 — 使用@PathVariable傳遞參數報錯404的解決