Wie kann ein optionaler Abfrageparameter mit dem Standardwert compojure-api
deklariert werden?Optionale Abfrageparameter (mit Standardwert) mit Compojure-API
Einer meiner Route Elemente ist wie folgt (nach this Lesen):
(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 ...))
Zunächst werden die boolean params wo wie die anderen definiert (zB show-future Boolean
), aber die erzeugte Swagger UI präsentiert sie als Combobox mit true
Wert als Standard. In der vorliegenden Form zeigt die Benutzeroberfläche eine Combobox ohne ausgewählte Option. Das gleiche passiert mit dem Mieter.
Eine Seite Frage: Wenn ich Swagger generierte Benutzeroberfläche verwenden, um eine Anfrage zu senden und Fehler zurückgegeben: "levels": "(not (instance? java.lang.Integer \"2\"))"
. Warum das? Soll die Bibliothek Zeichenkettenwerte nicht in die vom API deklarierten Typen konvertieren/konvertieren?
Vielen Dank im Voraus.
Vielen Dank für Ihre Antwort. Über den booleschen optionalen Parameter ist es egal, ob ich einen Standardwert definiere, da der Standardwert auf der Benutzeroberfläche nicht ausgewählt ist. –
@ matheus.emm Sie müssen den Standardwert für den Parameter angeben, wenn dieser optional sein soll. Ansonsten zwingt Swagger UI Sie, einen der Werte auszuwählen ('true' oder' false'). Wenn Sie die Anfrage senden, ohne einen Wert für diesen Abfrageparameter anzugeben, erhalten Sie einen Schema-Validierungsfehler. Der Standardwert ist erforderlich, damit Ihrem Parameter ein gültiger Wert zugewiesen wird (gemäß Ihrem Schema), wenn er nicht vom Aufrufer bereitgestellt wird. –
@ matheus.emm Ich habe die Antwort mit der Info aktualisiert, wie man mit "Integer" -Korrektur umgehen kann. –