【问题标题】:Spark Framework: Match with or without trailing slashSpark 框架:匹配带有或不带有斜杠
【发布时间】:2016-04-17 14:51:53
【问题描述】:

我注意到 Spark 框架中有一些东西。它不将尾部斜杠与映射路由匹配。因此它将 /api/test 和 /api/test/ 视为不同的 URI。

如果有办法将它们通配在一起,那很好,但似乎没有。我错过了什么吗?

我想要这条路线:

Spark.get("/api/test", (req, res) -> {
            return "TEST OK";
        });

匹配 /api/test 或 /api/test/。就目前而言,它只匹配/api/test,如果我将其切换到:

Spark.get("/api/test/", (req, res) -> {
            return "TEST OK";
        });

它只匹配/api/test/

【问题讨论】:

  • 我对 spark 一无所知...但如果 URI 是正则表达式,那么您可以在最后一个 / 之后添加 ?。跨度>

标签: java routes spark-java spark-framework


【解决方案1】:

您可以使用重定向设置 before 过滤器,例如:

Spark.before((req, res) -> {
    String path = req.pathInfo();
    if (path.endsWith("/"))
        res.redirect(path.substring(0, path.length() - 1));
});

这可能比映射重复的路线要好。

【讨论】:

  • 更好的选择
【解决方案2】:

它似乎在 2013 年之前被问过,但在 2015 年关闭(我假设没有实施):

https://github.com/perwendel/spark/issues/97

路由应该匹配带有和不带有斜杠 #97

jsnoriegam 于 2013 年 8 月 31 日打开此问题

ryber 在 2013 年 10 月 14 日向 ryber/spark 添加了引用此问题的提交

tipsy 在 2015 年 11 月 22 日添加了功能请求标签

perwendel 于 2015 年 11 月 23 日关闭此网站

ryber 提出了一个针对此问题的修复请求:

https://github.com/ryber/spark/commit/556597e679dc224719188f8d27d8ba10e58fd8bb

但是,这似乎不是当前SimpleRouteMatcher 类的一部分:

https://github.com/perwendel/spark/blob/ded78b7fa9b78749c0d5f6776bba9c9cd3cfb6fb/src/main/java/spark/route/SimpleRouteMatcher.java

【讨论】:

  • 我想我必须用斜杠和不带斜杠来映射每条路线。呜呜。
  • 或者深入研究 Spark 代码并提出另一个拉取请求,但尚不清楚这是否会被接受。无论如何,祝你好运。
  • 我认为通常(例如 Sinatra?)将允许使用正则表达式,因此您可以以 /? 结尾。那可能很好。
猜你喜欢
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
  • 1970-01-01
  • 2016-08-24
  • 2020-11-13
  • 1970-01-01
  • 2019-01-26
相关资源
最近更新 更多