spring mvc中@PathVariable / 帶斜杠方式獲取
spring mvc @PathVariable / 帶斜杠方式獲取
遇上這個問題,百度google瞭一下,抄襲裡面的內容,可以實現,在此備忘
實例
@RequestMapping(value = "/download/{value1}/**", method = RequestMethod.GET) public void getValue(@PathVariable String value1, HttpServletRequest request) throws CommonException { String value = extractPathFromPattern(request); }
private String extractPathFromPattern(final HttpServletRequest request) { String path = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE); String bestMatchPattern = (String) request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE); return new AntPathMatcher().extractPathWithinPattern(bestMatchPattern, path); }
springMVC @PathVariable中間帶/問題處理
問題
請求地址/username/resourceUrl/methodName,其中username可能有也可能沒有,resourceUrl中會帶/,這個時候要使用@PathVariable,不能正確匹配controller
解決思路
把resourceUrl處理成一個不帶/的參數即可
1、約定好/替換方案,比如請求方把/全部替換為–
2、通過url編碼解碼處理 / 經過編碼變成%2F 把resourceUrl編碼後,這個時候發現還是不能請求到正確的方法,因為到spring時已經自動解碼瞭。可以把%2F再編一次碼變成%252F。%編碼後是25
/** */abc/xiaoming/h5/user.json/get */ @ResponseBody @RequestMapping(method=RequestMethod.POST ,value="/abc/{username}/{resourceUrl}/{methodName}") public String dubboMock(HttpServletResponse response,@PathVariable String username,@PathVariable String resourceUrl,@PathVariable String methodName){ }
3、放棄使用PathVariable,手動去處理
/** */abc/xiaoming/h5/user.json/get */ @ResponseBody @RequestMapping(method=RequestMethod.POST ,value="/abc/**") public String dubboMock(HttpServletResponse response,HttpServletResponse request){ String url = request.getRequestURI(); //處理url }
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 如何替換@PathVariable中的變量
- RestFul風格 — 使用@PathVariable傳遞參數報錯404的解決
- @PathVariable註解,讓spring支持參數帶值功能的案例
- 基於spring mvc請求controller訪問方式
- 基於SpringMVC @RequestMapping的參數和用法