You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Clojure的reitit框架中定义可选query查询参数

实现方法

你用的是基于Clojure的Reitit框架开发接口,要把date查询参数设为可选,按如下修改即可:

修改步骤

  • 第一步:调整参数定义,把date标记为可选
    你现有代码中:parameters {:query {:date ::vt-vali/timestamp}}的写法默认参数必填,有两种常用修改方式,按需选择即可:
    1. 直接给参数加可选标记(适配Reitit默认参数解析规则,写法更简洁):
    :parameters {:query {:date {:optional true :schema ::vt-vali/timestamp}}}
    
    1. 用Clojure Spec显式声明可选键(适合项目全局用spec做参数校验的场景):
    :parameters {:query (s/keys :opt-un [::vt-vali/timestamp])}
    
  • 第二步:适配handler逻辑
    确认你的vt-data/ret-nodes函数支持接收nil作为date参数即可正常使用;如果不支持,给参数加默认值即可,示例如下(默认值可按业务需求调整):
    ;; 示例默认值为当前时间戳
    (let [date (or date (System/currentTimeMillis))
          result (vt-data/ret-nodes env-name date)]
    

修改后完整参考代码

["/environments/:env-name/nodes"
 {:swagger {:tags ["Nodes"]}
  :parameters {:path {:env-name ::vt-vali/name}}}
 [""
  {:get {:summary "Retrieve the nodes from this environment"
         :parameters {:query {:date {:optional true :schema ::vt-vali/timestamp}}}
         :responses {200 {:body map?}}
         :handler (fn [{{{:keys [env-name]} :path
                         {:keys [date]} :query} :parameters}]
                    (let [;; 需要默认值就打开下面这行,不需要可直接删除
                          ; date (or date 自定义默认时间戳)
                          result (vt-data/ret-nodes env-name date)]
                      (if (s/valid? map? result)
                        {:status 200
                         :body result}
                        {:status 500
                         :body result})))}}]]

内容的提问来源于stack exchange,提问作者LetsClojure

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:00:02