sid*_*ate 9 java regex spring spring-mvc
我必须支持以下URL格式
/service/country/city/addr1/addr2/xyz.atom
/service/country/city/addr1/addr2/addr3/xyz.atom
where country
和city
can可以映射到@PathVariable
但是之后路径可以是多个斜杠的动态.末端部分将具有.atom
或类似.
我试过跟随,但没有一个选项似乎工作
通配符
@RequestMapping(value="/service/{country}/{city}/**")
正则表达式
@RequestMapping(value="/service/{country}/{city}/{addr:.+}")
UseSuffixPatternMatch
Config类中的覆盖方法
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setUseSuffixPatternMatch(false);
}
Run Code Online (Sandbox Code Playgroud)看起来像斜线和点的组合不适用于上述解决方案.我一直在406
寻找不匹配的Accept标头,或者404
最动态的方法是用于MatrixVariable
管理地址列表,但它不适用于您的上下文,因为据我从您的问题中了解到,路径无法修改。
管理动态路径的最佳方法是分两步进行:
RequestMapping
提取除地址之外的所有数据所以第一步你会得到类似的东西:
@RequestMapping(value="/service/{country}/{city}/**/{file}.atom")
public String service(@PathVariable String country,
@PathVariable String city, @PathVariable String file,
HttpServletRequest request, Model model) {
Run Code Online (Sandbox Code Playgroud)
此映射与所有必需的路径匹配,并允许提取国家/地区、城市和文件名。
在第二步中,我们将使用提取的内容来获取地址,方法如下:
String path = (String) request.getAttribute(HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
path = path.substring(String.format("/service/%s/%s/", country, city).length(),
path.length() - String.format("%s.atom", file).length());
String[] addrs = path.split("/");
Run Code Online (Sandbox Code Playgroud)
String.split
来提取所有地址在这个级别,您拥有所需的一切。
归档时间: |
|
查看次数: |
2089 次 |
最近记录: |