Fork me on GitHub
#luminus
<
2022-09-01
>
cvetan18:09:10

I added swagger support to luminus, and I am having trouble defining endpoint with path variable, I defined endpoint like this:

["/:id"
     {:get {:summary "This request returns single sport by ID"
            :swagger {:produces ["application/json"]}
            :parameters {:path-params {:id int?}}
            :responses {200 {:description "Sport data"
                             :body {:id int?
                                     :name string?
                                     :url string?
                                     :enabled boolean?
                                     :createdAt string?
                                     :updatedAt string?}}
                        404 {:description "Sport not found"
                             :body {:status int?
                                    :message string?}}}
            :handler (fn [{{{:keys [id] :as id} :path} :path-params}]
                       (sports-service/get-sport id))}

cvetan18:09:02

but when I try calling this via swagger ui, I get following error in console altough parameter gets passed to handler function:

2022-09-01 17:21:00,338 [XNIO-1 task-1] ERROR io.undertow.request - UT005071: Undertow request failed HttpServerExchange{ GET /api/sports/1} 
java.lang.IllegalArgumentException: Key must be integer
	at clojure.lang.APersistentVector.invoke(APersistentVector.java:297)
	at ring.middleware.flash$flash_response.invokeStatic(flash.clj:24)
	at ring.middleware.flash$flash_response.invoke(flash.clj:14)
	at ring.middleware.flash$wrap_flash$fn__5702.invoke(flash.clj:39)
	at ring.adapter.undertow.middleware.session$wrap_undertow_session$fn__6260.invoke(session.clj:77)
	at ring.middleware.keyword_params$wrap_keyword_params$fn__6504.invoke(keyword_params.clj:53)
	at ring.middleware.nested_params$wrap_nested_params$fn__6562.invoke(nested_params.clj:89)
	at ring.middleware.multipart_params$wrap_multipart_params$fn__6860.invoke(multipart_params.clj:171)
	at ring.middleware.params$wrap_params$fn__6887.invoke(params.clj:75)
	at ring.middleware.cookies$wrap_cookies$fn__6033.invoke(cookies.clj:214)
	at ring.middleware.absolute_redirects$wrap_absolute_redirects$fn__7075.invoke(absolute_redirects.clj:47)
	at ring.middleware.resource$wrap_resource_prefer_resources$fn__6923.invoke(resource.clj:25)
	at ring.middleware.content_type$wrap_content_type$fn__7023.invoke(content_type.clj:34)
	at ring.middleware.default_charset$wrap_default_charset$fn__7047.invoke(default_charset.clj:31)
	at ring.middleware.not_modified$wrap_not_modified$fn__6989.invoke(not_modified.clj:61)
	at ring.middleware.x_headers$wrap_x_header$fn__6444.invoke(x_headers.clj:22)
	at ring.middleware.x_headers$wrap_x_header$fn__6444.invoke(x_headers.clj:22)
	at ring.middleware.x_headers$wrap_x_header$fn__6444.invoke(x_headers.clj:22)
	at ring.adapter.undertow$undertow_handler$fn$reify__18538.handleRequest(undertow.clj:40)
	at io.undertow.server.session.SessionAttachmentHandler.handleRequest(SessionAttachmentHandler.java:68)
	at io.undertow.server.Connectors.executeRootHandler(Connectors.java:387)
	at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:852)
	at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35)
	at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:2019)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1558)
	at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1449)
	at org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282)
	at java.base/java.lang.Thread.run(Thread.java:833)

cvetan18:09:32

what am I doing wrong, any advice would be much appreciated 😄