spring mvc中@PathVariable / 带斜杠方式获取

网友投稿 262 2022-12-16

spring mvc中@PathVariable / 带斜杠方式获取

目录spring mvc @PathVariable / 带斜杠方式获取实例springMVC @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(methoSfkRxVttyd=RequestMethod.POST ,value="/abc/**")

public String dubboMockhttp://(HttpServletResponse response,HttpServletResponse request){

String SfkRxVttyurl = request.getRequestURI();

//处理url

}

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java java.lang.InstantiationException异常案例详解
下一篇:springboot整合mybatis实现简单的一对多级联查询功能
相关文章

 发表评论

暂时没有评论,来抢沙发吧~