当我在POST请求中发送JSON数据时,我的控制器没有看到数据。等效的XML工作正常,Rails 2不支持JSON吗?我需要安装一些其他宝石吗?
我正在使用Rails 2.0.2,并且我为我的模型生成了脚手架。我可以使用生成的代码使用浏览器创建记录,或者我可以通过发送带有curl的XML POST请求来创建记录。
现在我想更改生成的代码以支持JSON而不是XML。我用format.xml
替换了format.json
次调用,现在GET请求给了我很好的JSON。
但是,当我尝试通过发送JSON POST请求创建记录时,没有任何参数传递给我的控制器。
为了追踪问题,我用以下方法替换了控制器的create()
方法:
# POST /some_models
# POST /some_models.json
def create
render :json => params
end
这只会转储params
哈希的内容,以便我可以看到传递了什么。
我使用这个curl语句用XML数据测试它:
curl --request POST --cookie cookies.txt -d "<some_model version='6.6' order_by='606'/>" -H "Content-Type:text/xml" http://localhost:3000/some_models.xml
工作正常,我看到了这个输出:
{"some_model": {"version": "6.6", "order_by": "606"}, "format": "xml", "action": "create", "controller": "some_models"}
现在我尝试使用JSON数据的等价物:
curl --request POST --cookie cookies.txt -d '{ "some_model": {"version": "6.6", "order_by": 606} }' -H "Content-Type:application/json" http://localhost:3000/some_models.json
现在我没有在some_model
哈希中获得params
密钥:
{"format": "json", "action": "create", "controller": "some_models"}
答案 0 :(得分:2)
幸运的是,事实证明对JSON的完全支持是 在2008年4月加入Rails,使其成为一等公民 以及XML和常规URL编码的表单字段。 此功能将在Rails 2.1中正式发布
文章提到在Rails 2.1之前,使用了这个json_request插件:
https://github.com/assaf/labnotes/tree/master/ruby/rails_plugins/json_request/