首页 > 解决方案 > Spark-Java:不同的路径字符串映射到相同的 Get 方法

问题描述

我遇到了两个不同的路径映射到同一个资源的问题。请让我知道为什么以下 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

谢谢

标签: javaspark-java

解决方案


将这两个请求映射到第一个路由的原因是您定义它们的顺序。Spark Java 文档在这里提到:

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

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

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

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

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

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

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


推荐阅读