7

リクエストを解析し、数値のパラメータを取得する必要がある 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")))

文字列 -> 数値変換を行うより良い方法はありますか?

リクエストの検証を行うためのより良い方法はありますか?

4

2 に答える 2

7

この質問には、Clojure で数値を解析するための良い例が含まれています。文字列に有効な数値が含まれているかどうかわからない場合は、アプローチが適切に見えます。

パラメータをクエリ文字列の一部として渡すことができる場合は、正規表現を含むルートを使用して値を取得できます。

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

正規表現条件が満たされた場合にのみルートが一致するため、Integer/parseInt チェックをスキップできます。

于 2012-08-29T10:47:51.800 に答える