我有基于 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/