gpt4 book ai didi

java - 带斜杠和点的 RequestMapping

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:24:09 25 4
gpt4 key购买 nike

我必须支持以下 URL 格式

/service/country/city/addr1/addr2/xyz.atom/service/country/city/addr1/addr2/addr3/xyz.atom

其中 countrycity 可以映射到 @PathVariable 但之后路径可以是带有多个斜线的动态路径。结束部分将有 .atom 或类似的。

我尝试了以下操作,但似乎没有一个选项有效

  • 通配符

    @RequestMapping(value="/service/{country}/{city}/**")

  • 正则表达式

    @RequestMapping(value="/service/{country}/{city}/{addr:.+}")

  • 使用后缀模式匹配


    重写配置类中的方法

     @Override
    public void configurePathMatch(PathMatchConfigurer configurer) {
    configurer.setUseSuffixPatternMatch(false);
    }

看起来斜杠和点的组合不适用于上述解决方案。对于不匹配的 Accept header ,我不断收到 406404

最佳答案

最动态的方法是使用 MatrixVariable 来管理地址列表,但它不适用于您的上下文,因为据我从您的问题中了解到的路径无法修改。

管理动态路径的最佳方法是分两步进行:

  1. 设置一个RequestMapping来提取除地址之外的所有数据
  2. 在方法中手动提取地址

因此对于第一步,您将拥有类似的东西:

    @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("/");
  1. 首先我们从请求中提取完整路径
  2. 然后我们删除我们已经提取的路径的开头和结尾
  3. 然后最后我们使用String.split来提取所有地址

在这个级别,您拥有所需的一切。

关于java - 带斜杠和点的 RequestMapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35990095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com