【问题标题】:How do I set default values for path parameters?如何设置路径参数的默认值?
【发布时间】:2019-03-26 11:34:24
【问题描述】:

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

【问题讨论】:

    标签: clojure compojure compojure-api


    【解决方案1】:

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

    (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}
    

    【讨论】:

    • 我希望允许用户通过同一路由 /:item-id 创建和更新记录,因为该路由需要存在 :item-id,否则用户只能更新匹配。如果路由中缺少 item-id,我是否可以设置默认值 null 以便路由 / 也有效?还是我应该只创建一条单独的路线?
    • 你需要为“/”创建一个单独的路由。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2018-07-21
      • 2016-02-02
      • 2022-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多