首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可选的查询参数(默认值)使用compojure-api

可选的查询参数(默认值)使用compojure-api
EN

Stack Overflow用户
提问于 2016-03-07 18:14:11
回答 2查看 4.1K关注 0票数 14

当使用compojure-api时,用默认值声明可选查询参数的正确方法是什么?

我的路由元素之一如下(在阅读之后):

代码语言:javascript
复制
(GET "/:id/descendants" [id]
     :return [d/CategoryTreeElement]
     :path-params [id :- Long]
     :query-params [context-type :- d/ContextType
                    levels :- Integer
                    {tenant :- d/Tenant :DEF_TENANT}
                    {show-future :- Boolean false}
                    {show-expired :- Boolean false}
                    {show-suppressed :- Boolean false}
     :summary "Fetch category descendants"
     (ok ...))

首先,布尔参数定义为其他参数(例如,show-future Boolean),但是生成的Swagger将它们表示为一个组合框,true值为默认值。在当前的表单中,UI显示一个没有选择选项的组合框。房客也是如此。

一个问题是:当我使用Swagger生成的UI发送请求并返回错误时:"levels": "(not (instance? java.lang.Integer \"2\"))"。为什么会这样呢?库不是应该强制/转换字符串值到API声明的指定类型吗?

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-07 18:37:43

对于你的第一个问题,这是工作的设计。当您需要布尔查询param时,Swagger呈现了一个UI,该UI强制您选择一个值( truefalse,它一开始就显示为true )。

当您将布尔查询param更改为可选时,第一个空值意味着“根本不发送此查询param”,而当您不将其更改为truefalse时,它将不会将该查询param追加到请求中。

关于整数查询param的第二个问题:默认情况下,json-coercion-matcher指定String->Integer,因此不支持开箱即用的Integer。您可以使用:coercion选项(在api api测试中有一个例子。)为您的API或每个路由全局指定您自己的协用器。您可以提供您自己的协用程序,它可以用json-coercion-matcher案例扩展现有的String->Integer

票数 5
EN

Stack Overflow用户

发布于 2019-04-15 15:55:37

如果您使用clojure.spec,并且希望将虚张声势文档中的默认值为false作为布尔变量,则可以使用spec工具库并执行以下操作:

代码语言:javascript
复制
(s/def ::show-future 
  (st/spec {:spec boolean?
            :json-schema/example false
            :json-schema/default false}))

然后,在查询参数中:

代码语言:javascript
复制
:query-params [{show-future :- ::show-future false}]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35850921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档