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

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

我有一个带有传递规范的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' } 

邮差请求设置:

邮递员请求的屏幕上限

我也尝试过:

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

power_ups_controller.rb 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 

对不起,回答这个问题太晚了,但可能会帮助别人。

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

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

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

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

另外,根据你的规范,你应该使用第二种forms,即

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

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

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

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

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