如何让rails将CURL中的params解析为JSON或XML而不是字符串?

Dan*_*Dan 4 xml api json ruby-on-rails ruby-on-rails-3

如何让rails将params解析为JSON或XML而不是字符串?我正在使用rails 3.0.7.

这就是我想要发生的事情.

Parameters: {"user"=>{"email"=>"user@blah.com", "password"=>"[FILTERED]"}}
Run Code Online (Sandbox Code Playgroud)

这是发生了什么

# controller
def create
  logger.debug params
end

# curl from command line
curl -i -H 'Content-Type:application/xml' -H 'Accept:application/xml' -X POST -d "<user><email>user@blah.com</email><password>password</password></user>" http://localhost:3000/api/v1/sessions.xml

# response
Started POST "/api/v1/sessions" for 127.0.0.1 at 2011-05-14 02:16:23 -0700
Processing by Api::V1::SessionsController#create as XML
Parameters: {"<user><email>user@blah.com</email><password>password</password></user>"}
{"<user><email>user@blah.com</email><password>password</password></user>", "action"=>"create", "controller"=>"api/v1/sessions", "format"=>"xml"}
Run Code Online (Sandbox Code Playgroud)

JSON也是如此.

Sim*_*mon 9

HTTP POST通常是名称/值对.

Rails正在尽最大努力找出你传递给它的东西并把它变成一个params哈希,但它确实没有意义.

您可以直接访问该请求:

def create
  string = request.body.read
  # if string is xml
  object = Hash.from_xml(string)
  # elsif string is JSON
  object = ActiveSupport::JSON.decode(string)
end
Run Code Online (Sandbox Code Playgroud)