В чем разница между `:path-param` и `{path-param}` в Java Spark?

Я работаю над сервером REST, созданным с помощью Java Spark, и мне было интересно узнать о разнице между следующими двумя синтаксисами для определения параметров пути с использованием :path-parameter и {path-parameter}:

path("/containers/:container-id", () -> { ...} )

path("/shipments/{shipment-id}", () -> { ... } )

В какой-то момент при запросе параметров пути на пути /{handler-id} (который вложен внутри /v1 и /handlers) мне пришлось изменить синтаксис с формы : на форму {}, чтобы заставить Spark не возвращать null при запросе параметров для handler-id .

Так в чем разница между этими двумя синтаксисами?


person Leon Overweel    schedule 01.06.2017    source источник


Ответы (1)


Единственный синтаксис для определения параметра в пути — :path-param.

Запрос значения этого параметра выполняется с помощью String paramVal = request.params(":path-param") (двоеточие при запросе необязательно).

Или, если вы хотите получить карту со всеми именами-значениями параметров, вы пойдете request.params();

Я не уверен, почему вы получили null при запросе вашего параметра, но я предполагаю, что вы использовали request.queryParams(":path-param");. Но этот API используется не для запроса параметров пути, как вы хотели, а для запроса параметров запроса, которые являются параметрами в форме пути, например /api/users?userId=1234.

Резюме

Path Definition  URL in browser                Query
---------------  ----------------------------  -----------------------------------
/api/users/:id   <host>/api/users/1234         request.params("id") ==> 1234
/api/users       <host>/api/users?id=1234      request.queryParams("id") ==> 1234
  • Обратите внимание, что возвращаемое значение всегда равно String, и при необходимости вам придется выполнить приведение.
person SHG    schedule 01.06.2017