SpringMVC中用@ParamVariable传递的参数包含斜杠(/)时,匹配不了报404错误的解决方案

来源:互联网 发布:阿里java工资水平 编辑:程序博客网 时间:2024/05/21 07:12

转自:http://www.tuicool.com/articles/Zf2iyem


@RequestMapping(value = "/tags/**")public String tags(HttpServletRequest request) {   // ISO-8859-1 ==> UTF-8 进行编码转换  String tagname = extractPathFromPattern(request);      tagname = ToolUtils.encodeStr(tagname);   // 其余处理略}// 把指定URL后的字符串全部截断当成参数// 这么做是为了防止URL中包含中文或者特殊字符(/等)时,匹配不了的问题private static 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);}

搞完之后,不管你输入什么样的URL,都能进入到指定的方法!

<a href="/tags/标签充A">标签充A</a>
<a href="/tags/标签充A/asd/asd">标签充A</a>
<a href="/tags/标签充A/BB/cc.html">标签充A</a>


以下是我修改后的代码。

@RequestMapping("test/**")
public void test(HttpServletRequest request,HttpServletResponse response) {
String tagname = extractPathFromPattern(request);
System.out.println(tagname);
// this.outPrint(response, this.getOutputMsg());
}


// 把指定URL后的字符串全部截断当成参数
// 这么做是为了防止URL中包含中文或者特殊字符(/等)时,匹配不了的问题
private static 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);
}


0 0
原创粉丝点击