Java Spark 中的 `:path-param` 和 `{path-param}` 有什么区别?

Leo*_*eel 4 java url-routing spark-java

我正在使用 Java Spark 构建 REST 服务器,我想知道以下两种用于定义路径参数的语法之间的区别,使用:path-parametervs {path-parameter}

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

path("/shipments/{shipment-id}", () -> { ... } )
Run Code Online (Sandbox Code Playgroud)

有一次,当查询路径上的路径参数/{handler-id}(嵌套在/v1和 中/handlers)时,我不得不将语法从:表单更改为{}表单,以使 Sparknull在查询handler-id.

那么这两种语法有什么区别呢?

SHG*_*SHG 5

在路径中定义参数的唯一语法是: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
Run Code Online (Sandbox Code Playgroud)
  • 请注意,返回值始终为 a String,如果需要,您必须进行强制转换。