替換@PathVariable的變量
因為要對接口進行統計, 而項目中用到了@PathVariable的注解, 也就是uri中攜帶請求參數的方式. 導致一個接口統計出來很多個請求, 比如 /api/get/1, /api/get/2 …
在網上找到可以通過
1
|
Map<String, String> pathVariables = (Map) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE); |
拿到這個PathVariable參數. 于是初步代碼如下, 將/api/get/{id} 這個變量替換成常量{x}.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
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") 綁定到操作方法的入參中。
1
2
3
4
5
|
//@GetMapping是一個組合注解,是@RequestMapping(method = RequestMethod.GET)的縮寫 @GetMapping ( "/getUserById/{id}" ) public User getUser( @PathVariable ( "id" ) Long userId){ return userService.selectUserById(userId); } |
不需要使用問號傳參,不需要寫key=valuel,直接寫value即可.
若方法參數名稱和需要綁定的uri template中變量名稱一致時,可以簡寫:
1
2
3
4
5
|
//@GetMapping是一個組合注解,是@RequestMapping(method = RequestMethod.GET)的縮寫。 @GetMapping ( "/getUserByName/{userName}" ) public User getUserByName( @PathVariable String userName){ return userService.selectUserByUserName(userName); } |
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://zzzgd.blog.csdn.net/article/details/109990287