如何构建Rails POST方法的邮递员请求

Joe*_*sey 8 rest ruby-on-rails postman

无论我如何格式化此请求的原始部分,我都无法避免下面的解析错误.

我有一个带有传递规范的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
Run Code Online (Sandbox Code Playgroud)

我正在使用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'
}
Run Code Online (Sandbox Code Playgroud)

邮差要求设置:

邮递员请求的屏幕上限

我也尝试过:

{
  'power_up': {
    'name': 'foo',
    'description': 'bar'
   }
}
Run Code Online (Sandbox Code Playgroud)

来自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
Run Code Online (Sandbox Code Playgroud)

Tej*_*tel 10

对不起有点太迟回答这个但可能会帮助其他人.

您需要做的只是-在您的请求标题(邮递员或任何客户端)添加

Content-Type = 'application/json'

或者,您也可以使用curl(source)进行尝试:

curl -X POST -H "Content-Type: application/json" -d '{"power_up": { "name": "foo", "description": "bar" } }' 127.0.01:3000/v1/power_ups.json


Fre*_*ung 7

单引号(')实际上不是JSON中合法的字符串分隔符:字符串必须用双引号(")括起来.你可以在浏览器中使用它,因为它们是javascript中的字符串分隔符.你可以很容易地复制它在一个irb会议上

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

另外,根据您的规范,您应该使用第二种形式,即

{
  "power_up": {
    "name": "foo",
    "description": "bar"
   }
}
Run Code Online (Sandbox Code Playgroud)


pro*_*ils 7

就像@Tejas Patel所说的那样都是关于标题的.但不是明确地设置它们,你可以:

  1. 在请求创建区域切换到body选项卡.设置raw单选按钮.在较低的文本区域输入您的身体:

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

  2. 然后在rigth的下拉列表中选择JSON (application/json)选项而不是默认Text选项.这将自动设置所需的标头.就是这样 - 你可以按"发送"按钮.