问题 Spark框架:匹配或不跟踪斜杠


我在Spark框架中注意到了一些东西。它与带有映射路径的尾部斜杠不匹配。所以它认为/ api / test和/ api / test /是不同的URI。

如果有一种方法可以将它们一起通配,那就没关系,但似乎没有。我错过了什么吗?

我想要这条路线:

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

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

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

它只匹配 /api/test/


12716
2018-01-12 20:17


起源

我什么都不知道火花...但如果URI是正则表达式,那么你可以添加一个 ? 在最后一次之后 /。 - Augusto


答案:


你可以设置一个 之前 过滤器具有重定向,例如:

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

这可能比映射重复的路由更好。


9
2018-02-07 13:39



一个更好的选择 - mtyson


它似乎在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


5
2018-01-12 21:26



我想我必须使用和不使用尾部斜线来映射每条路线。的Bleh。 - mtyson
或者深入了解Spark代码并提出另一个拉取请求,但目前尚不清楚是否会接受。祝你好运。 - Freek de Bruijn
我认为通常(例如Sinatra?)会允许正则表达式,所以你可以结束 /?。那可能很好。 - Max