作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我必须支持以下 URL 格式
/service/country/city/addr1/addr2/xyz.atom
/service/country/city/addr1/addr2/addr3/xyz.atom
其中 country
和 city
可以映射到 @PathVariable
但之后路径可以是带有多个斜线的动态路径。结束部分将有 .atom
或类似的。
我尝试了以下操作,但似乎没有一个选项有效
通配符
@RequestMapping(value="/service/{country}/{city}/**")
正则表达式
@RequestMapping(value="/service/{country}/{city}/{addr:.+}")
使用后缀模式匹配
重写配置类中的方法
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
configurer.setUseSuffixPatternMatch(false);
}
看起来斜杠和点的组合不适用于上述解决方案。对于不匹配的 Accept header ,我不断收到 406
或 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) {
此映射与所有必需的路径匹配,并允许提取国家、城市和文件名。
在第二步中,我们将使用提取的内容通过执行以下操作来获取地址:
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("/");
String.split
来提取所有地址在这个级别,您拥有所需的一切。
关于java - 带斜杠和点的 RequestMapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35990095/
我是一名优秀的程序员,十分优秀!