6

私は現在、clojure でいくつかの REST API を行っています。また、リング.ミドルウェア.フォーマット ライブラリを compojure と共に使用して、JSON を clojure データ構造との間で変換しています。

私は大きな問題を抱えています.JSONがリングアプリに投稿されると、すべての配列が配列内の最初の項目に置き換えられます. IE から投稿されたこの JSON を変換します

{
    "buyer":"Test Name",
    "items":[
        {"qty":1,"size":"S","product":"Red T-Shirt"},
        {"qty":1,"size":"M","product":"Green T-Shirt"}
    ],
    "address":"123 Fake St",
    "shipping":"express"
}

これに

{
    "buyer": "Test Name",
    "items": {
        "qty": 1,
        "size": "M",
        "product": "Green T-Shirt"
    },
    "address": "123 Fake St",
    "shipping": "express"
}

配列がルート要素である場合を含め、任意の配列に対してそれを行います。

json を返すために、clojure で次のコードを使用しています。

(defroutes app-routes
  (GET "/"
       []
       {:body test-data})
  (POST "/"
        {data :params}
        {:body data}))
        ;{:body (str "Printing " (count (data :jobs)) " jobs")}))

(def app
  (-> (handler/api app-routes)
      (wrap-json-params)
      (wrap-json-response)))

GET ルートには配列と出力が適切に問題がないため、データまたはwrap-restful-paramsミドルウェアを取得する方法のいずれかである必要があります。

何か案は?

4

3 に答える 3

3

ring-json-params で同様の問題が発生しています。そのため、生のリクエスト本文を使用して、JSON 文字列を自分で解析することになりました。

私は次のコードを使用しました:

(defroutes app-routes
(POST "/"
    {params :body}
    (slurp params)))

JSON の解析には clj-json.core ライブラリを使用します。

お役に立てれば。より良い方法を見つけた場合は、共有してください。私はClojure/Compojure初心者です!!!

于 2012-11-14T17:14:24.880 に答える
1

しばらく経ちましたが、同じ問題に遭遇しました。私がそれを機能させる唯一の方法は、 のring.middleware.format/wrap-restful-format に を使用することでしたcompojure.handler/api。その理由はわかりませんが、compujure.handler/apiラッパーを最初に配置すると、配列パラメーターが台無しになります

于 2013-09-02T20:38:39.480 に答える