这是我的应用程序:
(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 处理程序可以自己正常工作。提前致谢。
s/Int 被 Long 取代 默认情况下,Java 中的数字是长整数。
尝试使用名称和严格的结构更精确地定义您的路线,如下所示:
(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)}})}}]]])