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。

推薦閱讀: