I'm following this tutorial on how to use the compojure api and have run into a dead end with this exception:
lein ring server
2022-08-09 23:19:55.538:INFO::main: Logging initialized @921ms
WARN clojure.tools.logging not found on classpath, compojure.api logging to console.
Exception in thread "main" java.lang.RuntimeException: Map literal must contain an even number of forms, compiling:(ring_test/core.clj:16:16)
I have kept everything the same as the tutorial except changed my routes to a test route:
(ns ring-test.core
(:require [compojure.api.sweet :refer :all]
[ring.util.http-response :refer :all]))
(def app
(api
{:swagger
{:ui "/"
:spec "swagger.json"
:data {:info {:tile "Test"}
:tags [{:name "api"}]}}
(context "/api" []
:tags ["api"]
(GET "/test" []
:body ["test"]
(ok)))}))
and updated some of the versions in project.clj:
(defproject ring-test "0.1.0-SNAPSHOT"
:dependencies [[org.clojure/clojure "1.8.0"]
[metosin/compojure-api "2.0.0-alpha28"]]
:ring {:handler ring-test.core/app}
:profiles {:dev
{:plugins [[lein-ring "0.12.5"]]
:dependencies [[javax.servlet/servlet-api "2.5"]]}})
If anyone could help me with this issue that would be awesome!
In the tutorial, (context ...) is outside the map.
The problem is in your version, you move (context ...) inside this map.
You can fix this by moving (context ...) to outside the map as shown in the tutorial.