maybe similar to the previous question: does the coercion example from the README support content negotiation? muuntaja being there makes me thing so, but I can only get it to give me JSON
(ns flib.reitit
(:require [muuntaja.core :as mu]
[reitit.coercion.malli]
[reitit.ring :as ring]
[reitit.ring.coercion :as rrc]
[reitit.ring.middleware.dev :as middleware.dev]
[reitit.ring.middleware.muuntaja :as muuntaja]
[reitit.ring.middleware.parameters :as parameters]))
(def router
(ring/router
["/api"
["/math"
{:get {:parameters
{:query
[:map
[:x int?]
[:y int?]]}
:responses
{200 {:body [:map [:total int?]]}}
:handler
(fn [{{{:keys [x y]} :query} :parameters}]
{:status 200
:body {:total (+ x y)}})}}]]
;; router data affecting all routes
{:reitit.middleware/transform middleware.dev/print-request-diffs
:data {:coercion reitit.coercion.malli/coercion
:muuntaja mu/instance
:middleware [parameters/parameters-middleware
rrc/coerce-request-middleware
muuntaja/format-response-middleware
rrc/coerce-response-middleware]}}))
(comment
(def ring-handler
(let [dev-mode true
f (fn [] (reitit.ring/ring-handler router))]
(if dev-mode
(reitit.ring/reloading-ring-handler f)
(f))))
(-> (ring-handler {:request-method :get
:uri "/api/math"
:query-params {:x "1", :y "2"}
:headers {"Accept" "application/edn"}})
:body
slurp)
;; => "{\"total\":3}"
nil)found format-negotiate, but still
ah WOW, I missed that (I think?) Ring will lowercase all header keys.
so "accept" "application/edn" does work
but you do need format-negotiate-middleware