     (.setAccessible field true)
     (.get field form)))
 
-(defn get-query-params
+(defn get-query-params*
   "Parse query params from request and return a
   maybe multivalue map."
-  [^DefaultContext context]
-  (let [^Request request (:catacumba/request context)
-        ^MultiValueMap params (.getQueryParams request)]
+  {:internal :true :no-doc true}
+  [^Request request]
+  (let [^MultiValueMap params (.getQueryParams request)]
     (persistent!
      (reduce (fn [acc key]
                (let [values (.getAll params key)]

                (into [] cookiedata))
          (recur (rest cookies)))))))

(defprotocol IFormDataGetter
  (get-formdata [_]
    "Get form encoded or multipart request data and return
    it as multivalue map."))

(extend-protocol IFormDataGetter
  DefaultContext
  (get-formdata [^DefaultContext context]
    (let [^Context ctx (:catacumba/context context)]
      (get-formdata ctx)))

  Context
  (get-formdata [^Context ctx]
    (let [^MultiValueMap form (.parse ctx Form)
          ^MultiValueMap files (extract-files form)
          result (transient {})]
      (reduce (fn [acc key]
                (let [values (.getAll files key)]
                  (reduce #(utils/assoc-conj! %1 key %2) acc values)))
              result
              (.keySet files))
      (reduce (fn [acc key]
                (let [values (.getAll form key)]
                  (reduce #(utils/assoc-conj! %1 key %2) acc values)))
              result
              (.keySet form))
      (persistent! result))))

             (transient {})
             (.keySet params)))))

(defn get-query-params
  "Parse query params from context and return a
  maybe multivalue map."
  [^DefaultContext context]
  (get-query-params* (:catacumba/request context)))

(defn get-route-params*
  "Return a hash-map with parameters extracted from
  routing patterns."
  [^Context ctx]
  (into {} utils/keywordice-keys-t (.getPathTokens ctx)))

(defn get-route-params
  "Return a hash-map with parameters extracted from
  routing patterns."
  [^DefaultContext context]
  (get-route-params* (:catacumba/context context)))

(defn get-headers*
  [^Request request]
  (let [^Headers headers (.getHeaders request)
        ^MultiValueMap headers (.asMultiValueMap headers)]
    (persistent!
     (reduce (fn [acc ^String key]
               (let [values (.getAll headers key)
