10

このリクエストの生の部分をどのようにフォーマットしても、以下の解析エラーを避けることはできません。

コントローラーのメッセージが健全であることを示すために、仕様を渡す create メソッドを含む Rails API があります。

describe "POST power_up" do

    let!(:client) { FactoryGirl.create :client, name: "joe", auth_token: "asdfasdfasdfasdfasdfasdf" }

    it "should create and save a new Power Up" do

      expect { post :create, format: :json, power_up: FactoryGirl.attributes_for(:power_up) }.to change(V1::PowerUp, :count).by(1)
    end

  end

Postman を使用して POST しようとしています。何を試してもエラーが発生します:

Started POST "/v1/power_ups.json" for 127.0.0.1 at 2014-08-30 18:05:29 -0400
Error occurred while parsing request parameters.
Contents:

{
  'name': 'foo',
  'description': 'bar'
}


ActionDispatch::ParamsParser::ParseError (795: unexpected token at '{
  'name': 'foo',
  'description': 'bar'
}

Postman リクエストのセットアップ:

郵便配達員リクエストのスクリーン キャップ

私も試しました:

{
  'power_up': {
    'name': 'foo',
    'description': 'bar'
   }
}

の create メソッドと強力なパラメータ宣言からのコードpower_ups_controller.rb:

def create
    @power_up = PowerUp.new(power_up_params)

  if @power_up.save!
    redirect_to @power_up
  end
end

private

  def power_up_params
    params.require(:power_up).permit(:name, :description)
  end
4

3 に答える 3

13

これに答えるには少し遅すぎて申し訳ありませんが、他の誰かを助けるかもしれません。

あなたがする必要があるのは-、あなたの要求ヘッダーに(郵便配達員またはどんなクライアントでも)追加することだけです

Content-Type = 'application/json'

または、curl (ソース) で試すこともできます。

curl -X POST -H "Content-Type: application/json" -d '{"power_up": {
    "name": "foo",
    "description": "bar"
   }
}' 127.0.01:3000/v1/power_ups.json
于 2016-01-31T06:28:15.893 に答える
7

一重引用符 (') は実際には JSON の有効な文字列区切り文字ではありません。文字列は二重引用符 (") で囲む必要があります。これは JavaScript の文字列区切り文字であるため、ブラウザーで問題なく使用できます。これは簡単に複製できます。 irbセッションで

JSON.parse(%q[{'foo': 'bar'}]) #=> raises JSON::ParserError
JSON.parse(%q[{"foo": "bar"}]) #=> ok

さらに、仕様を考えると、2番目の形式を使用する必要があります。

{
  "power_up": {
    "name": "foo",
    "description": "bar"
   }
}
于 2014-08-30T22:34:17.407 に答える