+
+ +
+
+ +
+ +

Default handler

+

By default, if no routes match, nil is returned, which is not valid response in Ring:

+
(require '[reitit.ring :as ring])
+
+(defn handler [_]
+  {:status 200, :body ""})
+
+(def app
+  (ring/ring-handler
+    (ring/router
+      ["/ping" handler])))
+
+(app {:uri "/invalid"})
+; nil
+
+

Setting the default-handler as a second argument to ring-handler:

+
(def app
+  (ring/ring-handler
+    (ring/router
+      ["/ping" handler])
+    (constantly {:status 404, :body ""})))
+
+(app {:uri "/invalid"})
+; {:status 404, :body ""}
+
+

To get more correct http error responses, ring/create-default-handler can be used. It differentiates :not-found (no route matched), :method-not-accepted (no method matched) and :not-acceptable (handler returned nil).

+

With defaults:

+
(def app
+  (ring/ring-handler
+    (ring/router
+      [["/ping" {:get handler}]
+       ["/pong" (constantly nil)]])
+    (ring/create-default-handler)))
+
+(app {:request-method :get, :uri "/ping"})
+; {:status 200, :body ""}
+
+(app {:request-method :get, :uri "/"})
+; {:status 404, :body ""}
+
+(app {:request-method :post, :uri "/ping"})
+; {:status 405, :body ""}
+
+(app {:request-method :get, :uri "/pong"})
+; {:status 406, :body ""}
+
+

With custom responses:

+
(def app
+  (ring/ring-handler
+    (ring/router
+      [["/ping" {:get handler}]
+       ["/pong" (constantly nil)]])
+    (ring/create-default-handler
+      {:not-found (constantly {:status 404, :body "kosh"})
+       :method-not-allowed (constantly {:status 405, :body "kosh"})
+       :not-acceptable (constantly {:status 406, :body "kosh"})})))
+
+(app {:request-method :get, :uri "/ping"})
+; {:status 200, :body ""}
+
+(app {:request-method :get, :uri "/"})
+; {:status 404, :body "kosh"}
+
+(app {:request-method :post, :uri "/ping"})
+; {:status 405, :body "kosh"}
+
+(app {:request-method :get, :uri "/pong"})
+; {:status 406, :body "kosh"}
+
+ + +
+ +
+
+
+ +

results matching ""

+
    + +
    +
    + +

    No results matching ""

    + +
    +
    +
    + +
    +