Spark Framework:匹配有或没有尾部斜杠

Spark Framework: Match with or without trailing slash

我注意到 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/

2013年好像有人问过,2015年就关闭了(估计没实现):

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

Routes should match with and without trailing slash #97

jsnoriegam opened this issue on Aug 31, 2013

ryber added a commit to ryber/spark that referenced this issue on Oct 14, 2013

tipsy added the Feature request label on Nov 22, 2015

perwendel closed this on Nov 23, 2015

ryber 提出了一个修复此问题的拉取请求:

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

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

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

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

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

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