Spark 框架:匹配,带或不带尾部斜杠

2022-09-04 19:50:15

我注意到Spark Framework中的一些东西。它与映射的路由不匹配尾部斜杠。因此,它将 /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/


答案 1

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

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


推荐