You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
FWIW, for anyone else encountering this issue, I solved it by capturing query parameters two different ways, one capturing the raw URL query parameters, and another which enables inputing values through the swagger UI. In the box, the user will enter key-value pairs like:
foo=123
baz=abc
Which in the following behaves the same as a query using /my-route?foo=123&baz=abc
The handler looks like this.:
(GET "/" [& params] ;; fields captures URL query params
;; query enables an input box in the Swagger UI
:query-params [{query :- [scm/Str] []}]
(let [params (dissoc params query)
processed-query (into {} (map #(let [[lhs rhs] (str/split % #"=")] [(keyword lhs) rhs]) query))
params (merge params query)]
;; here params is the same for normal query parameters or the Swagger UI
The var params will be a map containing the query variables:
Library Version(s)
2.0.0-alpha31
Problem
Swagger can display a UI for setting dynamic query parameters, but I can't figure out how to do it with compojure-api.
I have a /find endpoint which needs to receive arbitrary query parameters.
E.g., Given
/api/find?x=1&y=2&z=3
I want to receive a map {:x 1, :y 2, :3} somewhere in my handler. The keys are chosen by the requester.This works:
But the Swagger UI does not provide a way to set the query parameters:
I've tried variants of the route, providing
And many other things. I can't seem to find documentation for the arguments to
:query
. (Also, does anyone understand what:-
is for?)If I use a schema that starts with
schema.core/maybe
...and provide this to :query...
Swagger at least shows a box that allows me to assign several values inside another parameter, but it's not the one I want:
It produces a URL like this:
But I want
The text was updated successfully, but these errors were encountered: