【问题标题】:Spark-Java: Different Path Strings Map to Same Get MethodSpark-Java:不同的路径字符串映射到相同的 Get 方法
【发布时间】:2019-10-21 00:25:06
【问题描述】:

我遇到了两个不同的路径映射到同一个资源的问题。请让我知道为什么以下 2 条路径映射到同一路径:

get("/test/:idtest/:idsimple", (request, response) -> "");
get("/test/all/:idtest", (request, response) -> "");

以下两个调用映射到同一个:

curl -X GET -i http://localhost:4567/test/2/3

curl -X GET -i http://localhost:4567/test/all/5

谢谢

【问题讨论】:

    标签: java spark-java


    【解决方案1】:

    这两个请求被映射到第一个路由的原因是你定义它们的顺序。 Spark Java 文档提到here

    路由按照定义的顺序进行匹配。调用第一个匹配请求的路由。

    当您调用 http://localhost:4567/test/2/3 时,Java Spark 会首先尝试将其与您定义的第一个路由 "/test/:idtest/:idsimple" 匹配:

    • 变量idtest 将匹配到2
    • 变量idsimple 将匹配到3

    当您调用 http://localhost:4567/test/all/5 时,Java Spark 会首先尝试将其与您再次定义的第一个路由匹配:

    • 变量idtest 将匹配到all
    • 变量idsimple 将匹配到5

    所以它们都匹配,因此映射到这条路线。

    如果您更改路由定义的顺序,则"/test/all/:idtest" 将是第一个匹配的路径,然后调用http://localhost:4567/test/all/5 将映射到正确的路由,而调用http://localhost:4567/test/2/3 将失败第一个并且将映射到第二个。

    【讨论】:

    • 谢谢。这确实有效。我想我需要了解路由规则才能更好地了解正在发生的事情。但即便如此,整个路线排序也不是一件有趣的事情。
    • 很高兴它有效!是的,排序可能有点烦人,但如果你想一想,如果两个请求可以映射到同一条路线,你必须根据某些东西做出决定,这就是顺序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-14
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多