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

What's the difference between `:path-param` and `{path-param}` in Java Spark?

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

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

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

有一次,在查询路径 /{handler-id}(嵌套在 /v1/handlers 中)的路径参数时,我不得不更改 : 形式到 {} 形式,使 Spark 在查询 handler-id.

的参数时不 return null

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

在路径中定义参数的唯一语法是 :path-param

查询该参数的值由String paramVal = request.params(":path-param")完成(查询时冒号可有可无)

或者,如果您想要获得包含所有参数名称-值的地图,您可以request.params();

我不确定你为什么在查询参数时得到 null,但我猜你使用了 request.queryParams(":path-param");。但是这个API不是用来查询你想要的path-params,而是查询一个query params,它是/api/users?userId=1234这样的path形式的参数.

总结

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,如果需要,您必须进行转换。