0

在下面的示例中,如何为路径参数 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 ...))
4

2 回答 2

0

您应该将路径参数名称与字符串占位符匹配。路径参数不需要默认值 - 如果不存在路径参数,则路由不匹配。这是一个工作示例:

(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}
于 2018-10-22T20:48:48.030 回答
0

如果参数的 URL 中不存在任何值,则使用默认值。通过将问号 (?) 附加到参数名称的末尾,可以使路径参数成为可选参数。例如,身份证?可选值和默认路由参数的区别在于:具有默认值的路由参数总是产生一个值。可选参数仅在请求 URL 提供值时才具有值。路径参数可能具有必须匹配从 URL 绑定的路由值的约束。在路由参数名称后添加 : 和约束名称

于 2021-11-25T18:49:47.553 回答