RIng with Coercion url parameter returning :status 500

问题描述 投票:0回答:2

这是我的应用程序:

(def routes
  [["/api"
    ping-routes
    submissions-routes]])

(def app
  (ring/ring-handler
    (ring/router routes
      {:data {:coercion reitit.coercion.schema/coercion
              :muuntaja m/instance
              :middleware [[wrap-cors
                            :access-control-allow-origin [#"http://localhost:4200"]
                            :access-control-allow-methods [:get :post]]
                           parameters-middleware
                           format-negotiate-middleware
                           format-response-middleware
                           exception-middleware
                           format-request-middleware
                           coerce-exceptions-middleware
                           coerce-request-middleware
                           coerce-response-middleware]}})
    (ring/routes
      (ring/redirect-trailing-slash-handler {:method :strip})
      (ring/create-default-handler
       {:not-found (constantly {:status 404 :body "Route not found"})}))))

(def ping-routes
  ["/ping" {:get (fn [req]
                   {:status 200
                    :body {:ping "pong"}})}])


(def submissions-routes
  ["/submissions"
   ["" {:get get-submissions}]
   ["/:id" {:get {:parameters {:path {:id s/Int}}
                      :handler get-submission-by-id}}]])


(comment 
  (get-submission-by-id {:parameters {:path 20}}))

当我尝试访问 "submissions/1 我在浏览器或 repl 中得到 "{"type":"exception","class":"clojure.lang.ExceptionInfo"}":

{:status 500,
 :body
 #object[java.io.ByteArrayInputStream 0x3db2e139 "java.io.ByteArrayInputStream@3db2e139"],
 :headers {"Content-Type" "application/json; charset=utf-8"}}

如果我运行我的评论代码,那么 get-submission-by-id 处理程序可以自己正常工作。提前致谢。

clojure ring reitit
2个回答
0
投票

s/IntLong 取代 默认情况下,Java 中的数字是长整数。


0
投票

尝试使用名称和严格的结构更精确地定义您的路线,如下所示:

(def submissions-routes
      [["/submissions" {:name ::experiment}
        ["" {:name ::root-submission-route
             :get  {:handler (fn [_] {:status 200
                                      :body   {:resp "empty get"}})}}]
        ["/:id" {:name ::root-submission-route-id
                 :get  {:parameters {:path {:id Long}}
                        :handler    (fn [r] {:status 200 :body {:resp (-> r :path-params :id)}})}}]]])
© www.soinside.com 2019 - 2024. All rights reserved.