替換@PathVariable的變量
因?yàn)橐獙涌谶M(jìn)行統(tǒng)計(jì), 而項(xiàng)目中用到了@PathVariable的注解, 也就是uri中攜帶請求參數(shù)的方式. 導(dǎo)致一個(gè)接口統(tǒng)計(jì)出來很多個(gè)請求, 比如 /api/get/1, /api/get/2 …
在網(wǎng)上找到可以通過
1
|
Map<String, String> pathVariables = (Map) request.getAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE); |
拿到這個(gè)PathVariable參數(shù). 于是初步代碼如下, 將/api/get/{id} 這個(gè)變量替換成常量{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 目標(biāo)挺進(jìn)發(fā)展過程中具有里程碑的意義。
通過 @PathVariable 可以將 URL 中占位符參數(shù)綁定到控制器處理方法的入?yún)⒅?URL 中的 {xxx} 占位符可以通過
@PathVariable("xxx") 綁定到操作方法的入?yún)⒅小?/p>
1
2
3
4
5
|
//@GetMapping是一個(gè)組合注解,是@RequestMapping(method = RequestMethod.GET)的縮寫 @GetMapping ( "/getUserById/{id}" ) public User getUser( @PathVariable ( "id" ) Long userId){ return userService.selectUserById(userId); } |
不需要使用問號傳參,不需要寫key=valuel,直接寫value即可.
若方法參數(shù)名稱和需要綁定的uri template中變量名稱一致時(shí),可以簡寫:
1
2
3
4
5
|
//@GetMapping是一個(gè)組合注解,是@RequestMapping(method = RequestMethod.GET)的縮寫。 @GetMapping ( "/getUserByName/{userName}" ) public User getUserByName( @PathVariable String userName){ return userService.selectUserByUserName(userName); } |
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://zzzgd.blog.csdn.net/article/details/109990287