当使用compojure-api时,用默认值声明可选查询参数的正确方法是什么?
我的路由元素之一如下(在阅读这之后):
(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声明的指定类型吗?
提前谢谢。
发布于 2016-03-07 18:37:43
对于你的第一个问题,这是工作的设计。当您需要布尔查询param时,Swagger呈现了一个UI,该UI强制您选择一个值( true或false,它一开始就显示为true )。
当您将布尔查询param更改为可选时,第一个空值意味着“根本不发送此查询param”,而当您不将其更改为true或false时,它将不会将该查询param追加到请求中。
关于整数查询param的第二个问题:默认情况下,json-coercion-matcher指定String->Integer,因此不支持开箱即用的Integer。您可以使用:coercion选项(在api api测试中有一个例子。)为您的API或每个路由全局指定您自己的协用器。您可以提供您自己的协用程序,它可以用json-coercion-matcher案例扩展现有的String->Integer。
发布于 2019-04-15 15:55:37
如果您使用clojure.spec,并且希望将虚张声势文档中的默认值为false作为布尔变量,则可以使用spec工具库并执行以下操作:
(s/def ::show-future
(st/spec {:spec boolean?
:json-schema/example false
:json-schema/default false}))然后,在查询参数中:
:query-params [{show-future :- ::show-future false}]https://stackoverflow.com/questions/35850921
复制相似问题