Spark-Java: различные пути сопоставляются с одним и тем же методом Get - PullRequest
0 голосов
/ 21 октября 2019

Я столкнулся с проблемой, когда два разных пути отображаются на один и тот же ресурс. Пожалуйста, дайте мне знать, почему следующие 2 пути отображаются на один и тот же путь:

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

После двух сопоставлений вызовов к одному и тому же:

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

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

Спасибо

1 Ответ

0 голосов
/ 22 октября 2019

Причиной сопоставления этих двух запросов первому маршруту является порядок, в котором вы их определили. Документация Spark Java упоминает здесь , что:

Маршруты сопоставляются в порядке их определения. Вызывается первый маршрут, соответствующий запросу.

При вызове 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 завершится неудачно с первым и будет сопоставлен со вторым.

...