clojure - 在 Clojure 中验证 compojure 请求时解析字符串中的整数

标签 clojure compojure

我有基于 compojure 的应用程序,我需要在其中解析请求并检索可以是数字的参数。我希望能够在实际处理请求之前验证参数是否存在并且它们是数字。这是我到目前为止:

(defn get-int [str]
  "Returns nil if str is not a number"
  (try (Integer/parseInt str)
    (catch NumberFormatException _)))

(defn some-request [request]
    (let [some-number (get-int (get-in request [:route-params :some-number])
         other-number (get-int (get-in request [:route-params :other-number])]
    (if (every? identity [some-number other-number])
        (process-the-request)
        (bad-request "The request was malformed")))

有没有更好的方法来进行字符串-> 数字转换?

有没有更好的方法来进行请求验证?

最佳答案

这个问题包含很好的例子 parsing numbers in Clojure .如果您不确定该字符串是否包含有效数字,那么您的方法看起来不错。

如果您可以将参数作为查询字符串的一部分传递,则可以使用带有正则表达式的路由来检索值,例如

(GET ["/user/:id", :id #"[0-9]+"] [id] 
  (let [num (read-string id)]
    (str "The number is: " num)))

该路由仅在满足正则表达式条件时才匹配,因此您可以跳过 Integer/parseInt 检查。

关于clojure - 在 Clojure 中验证 compojure 请求时解析字符串中的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12175709/

相关文章:

clojure - compojure 路由背后的 "big idea"是什么?

clojure - 当路由绑定(bind)时 compojure 获取请求

clojure - 如何通过逆时针(或 la clojure)运行/调试 compojure Web 应用程序

java - Observable/toObservable 找不到静态函数?

gradle - 为什么 gradle-clojure 插件会跳过 compileClojure 任务?

Clojure 或 Scheme 贝叶斯分类库?

适用于响应式应用程序的 Clojure Web 框架

clojure - 使用 ring/compojure 提供静态文件 - 来自 war

performance - Clojure 中的 Takeuchi 数字(性能)

android - Clojure android 无法读取文件