En supposant que vous ne voulez distinguer explicitement sur Accepter tête - et ne pas revenir simplement le type de réponse appropriée selon les réponses de Ankur, vous pouvez créer votre propre fonction d'envoi comme suit.
(defn dispatch [m]
(let [req (ring-request)
accept (get (:headers req) "accept")
accept? #(re-find (re-pattern (str "^" %)) accept)
key (cond
(accept? "application/json") :json
(accept? "text/html") :html
:else :default)]
((key m))))
et ensuite appeler comme si
(defpage "/foo" []
(dispatch {:json (fn [] "{}")
:html (fn [] "html")
:default (fn [] "default")}))
La fonction accept?
ci-dessus est un peu primitive, mais il peut servir de point de départ.
La question concernait spécifiquement Compojure/Ring – Sathish
@Sathish Vous pouvez obtenir l'en-tête 'Accept' en faisant' (get-in request [: headers "accept"]) 'où' request' est l'objet de requête transmis à votre gestionnaire. C'est ce que je voulais dire par "indexer dans l'objet de requête". –