如何设置路径参数的默认值?
How do I set default values for path parameters?
在下面的示例中,如何为路径参数item-id 设置一个默认值?
(POST "/:id" [item-id]
:path-params [item-id :- Int]
:body [body Body]
:query-params [{item-name :- Str nil}]
:summary "Create or update a item."
(ok ...))
您应该将路径参数名称与字符串占位符相匹配。路径参数不需要默认值——如果不存在路径参数,则路由不匹配。这是一个工作示例:
(require '[compojure.api.sweet :refer :all])
(require '[ring.util.http-response :refer :all])
(require '[schema.core :as s])
(require '[muuntaja.core :as m])
(def app
(api
(POST "/:item-id" []
:path-params [item-id :- s/Int]
:query-params [{item-name :- s/Str nil}]
:summary "Create or update a item."
(ok {:item-id item-id
:item-name item-name}))))
(->> {:request-method :post
:uri "/123"
:query-params {"item-name" "kikka"}}
(app)
:body
(m/decode m/instance "application/json"))
; => {:item-name "kikka", :item-id 123}
如果参数的 URL 中没有值,则使用默认值。通过在参数名称的末尾附加问号 (?) 使路径参数成为可选参数。例如,id?。可选值和默认路由参数的区别是:
具有默认值的路由参数总是产生一个值。
可选参数只有在请求 URL 提供值时才具有值。
路径参数可能有约束,必须匹配从 URL 绑定的路由值。在路由参数名称后添加 : 和约束名称
在下面的示例中,如何为路径参数item-id 设置一个默认值?
(POST "/:id" [item-id]
:path-params [item-id :- Int]
:body [body Body]
:query-params [{item-name :- Str nil}]
:summary "Create or update a item."
(ok ...))
您应该将路径参数名称与字符串占位符相匹配。路径参数不需要默认值——如果不存在路径参数,则路由不匹配。这是一个工作示例:
(require '[compojure.api.sweet :refer :all])
(require '[ring.util.http-response :refer :all])
(require '[schema.core :as s])
(require '[muuntaja.core :as m])
(def app
(api
(POST "/:item-id" []
:path-params [item-id :- s/Int]
:query-params [{item-name :- s/Str nil}]
:summary "Create or update a item."
(ok {:item-id item-id
:item-name item-name}))))
(->> {:request-method :post
:uri "/123"
:query-params {"item-name" "kikka"}}
(app)
:body
(m/decode m/instance "application/json"))
; => {:item-name "kikka", :item-id 123}
如果参数的 URL 中没有值,则使用默认值。通过在参数名称的末尾附加问号 (?) 使路径参数成为可选参数。例如,id?。可选值和默认路由参数的区别是: 具有默认值的路由参数总是产生一个值。 可选参数只有在请求 URL 提供值时才具有值。 路径参数可能有约束,必须匹配从 URL 绑定的路由值。在路由参数名称后添加 : 和约束名称