2011-11-01 5 views
5

¿Hay alguna forma de obtener el objeto HttpServletRequest en un controlador Ring? Estoy usando Noir para desarrollar una aplicación web. Necesito obtener el obj HttpServletRequest al manejar un URI. Así que utilizo la función (noir.request.ring-request) para recuperar el mapa de solicitud de llamada que contiene: servlet-request key, pero el valor es nil. ¿Es esta la manera correcta de hacerlo o me extraño algo?¿Cómo obtener HttpServletRequest en un controlador de anillo?

siguiente es el código:

(ns my-app 
    (:use noir.request)) 
(defpage [:get "/app"] [] 
    (str (ring-request))) 

el resultado:

{:remote-addr "127.0.0.1", :scheme :http, :query-params {}, :session {}, :form-params {}, :multipart-params {}, :servlet #, :request-method :get, :query-string nil, :content-type nil, :cookies {"ring-session" {:value "eb509a65-d33a-40d2-9646-e2ff785428b0"}}, :uri "/app", :server-name "127.0.0.1", :params {}, :headers {"cookie" "ring-session=eb509a65-d33a-40d2-9646-e2ff785428b0", "accept-charset" "GBK,utf-8;q=0.7,*;q=0.3", "accept-language" "en-US,en;q=0.8,zh-CN;q=0.6,zh;q=0.4", "accept-encoding" "gzip,deflate,sdch", "accept" "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "user-agent" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.106 Safari/535.2", "connection" "keep-alive", "host" "127.0.0.1:8080"}, :servlet-request #, :content-length nil, :server-port 8080, :character-encoding nil, :servlet-response #, :body #, :servlet-context #} 
+0

Fuera de interés, lo que estás tratando de hacer que el objeto de solicitud? Tal vez hay alguna otra forma de lograr esto. –

Respuesta

1

Parece que el mapa solicitud anillo está construido basándose en el adaptador que está utilizando para el servidor web. En el caso del muelle, esto sucede en ring.adapter.jetty:

https://github.com/ring-clojure/ring/blob/master/ring-jetty-adapter/src/ring/adapter/jetty.clj

Si yo fuera usted, me gustaría crear mi propio adaptador que añade explícitamente lo que necesita el mapa petición. Específicamente debería reemplazar

request-map (servlet/build-request-map request)

con algo como:

request-map (assoc (servlet/build-request-map request) :jetty-request request)
Cuestiones relacionadas