使用compojure-api
时声明可选查询参数的默认值的正确方法是什么?使用compojure-api的可选查询参数(带缺省值)
我的一个路径元素的如下(读取this后):
(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
),但所生成的扬鞭UI呈现它们作为组合框布尔PARAMS默认值为true
。在目前的形式中,用户界面显示了一个没有选择选项的组合框。租户也是如此。
一方面的问题:当我使用Swagger生成的UI发送请求并返回错误时:"levels": "(not (instance? java.lang.Integer \"2\"))"
。这是为什么?库不是应该强制/将字符串值转换为由API声明的指定类型吗?
在此先感谢。
谢谢你的回答。所以关于布尔可选参数,如果我定义一个默认值并不重要,因为在UI上没有选择默认值。 –
@ matheus.emm如果您希望它是可选的,您必须指定默认参数值。否则Swagger UI会强制你选择其中一个值('true'或'false'),如果你发送的请求没有为该查询参数指定一个值,你会得到schema验证错误。默认值是必需的,所以如果你的参数没有被调用者提供,那么你的参数有一个有效的值(根据你的模式)。 –
@ matheus.emm我已经更新了如何处理Integer强制的信息。 –