教你如何替換@PathVariable中的變數

roc_guo發表於2021-11-10
替換@PathVariable的變數

因為要對介面進行統計, 而專案中用到了@PathVariable的註解, 也就是uri中攜帶請求引數的方式. 導致一個介面統計出來很多個請求, 比如 /api/get/1, /api/get/2 …

在網上找到可以透過

MappathVariables = (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();
    MappathVariables = (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);
}

以上為個人經驗,希望能給大家一個參考。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901823/viewspace-2841537/,如需轉載,請註明出處,否則將追究法律責任。

相關文章