类型转换计算路由的 id 自动转换为整数



>我有这样的东西(GET "/photo/:id/tags/:tag-id/...")

因此,对于该上下文中的每个路由,我都必须将这些 id 显式类型转换为 Integer。有没有办法自动实现这一点,或者有一个公共的地方来类型转换 ID 而不是每个控制器的操作?

从 Compojure 1.4.0 开始,您还可以使用 :<<关键字为参数提供强制函数:

[x :<< as-int]

在上述情况下,参数 x 将在分配之前通过 as-int 函数传递。如果任何强制函数返回 nil,则认为强制已失败,并且路由将不匹配。

例:

(defroutes app 
  (GET "/customers" [] customers)
  (GET "/suppliers" [] suppliers)
  (GET "/accounts" [] accounts)
  (context "/statements" []
           (GET "/" [] statements)
           (GET "/:id" [id :<< as-int] (single-statement id))))

您可能会使用 compojure-api 获得此行为,您可以在其中为 URL/查询参数以及请求正文指定架构类型。例如:

(defapi app
  (GET "/photo/:id" []
    :path-params [id :- Long]
    (ok {:message (str "Photo with ID " id)})))

通过指定[id :- Long],您要求将id路径参数强制转换为Long类型。

最新更新