昨天遇到這樣一個問題,先簡單介紹下.redis
咱們想要統計熱點請求URL,進而進行分析優化restful
經過過濾器獲取到請求url(調用方法request.getservletpath),經過redis進行記錄,最後作統計分析優化
因爲存在部分restful風格的url(經過url進行參數傳遞),這就致使不一樣的參數獲取到的url不一樣的問題,顯然這不是咱們想要的編碼
由於控制層解析restful風格的傳參,用到了註解@PathVariable,因此考慮經過獲取請求方法上的@PathVariable註解的數量,進而獲取到參數的數量(兩者相等,固然這要求規範編碼~),而後截取url獲得真正須要的urlurl
private String getRealUrl(Object handler,String url){ Annotation[][] parameterAnnotations = ((HandlerMethod) handler).getMethod().getParameterAnnotations(); int i = 0; for (Annotation[] annotations : parameterAnnotations) { for (Annotation annotation : annotations) { if(annotation instanceof PathVariable){ i++; break; } } } if (i == 0){ return url; } List<String> split = Arrays.asList(url.split("\\/")); List<String> subList = split.subList(0, split.size() - i); String join = Joiner.on("/").join(subList); return join; }