【问题标题】:How do I get rails to parse params from CURL as JSON or XML instead of a string?如何让 Rails 将 CURL 中的参数解析为 JSON 或 XML 而不是字符串?
【发布时间】:2011-08-25 10:49:20
【问题描述】:

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

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

Parameters: {"user"=>{"email"=>"user@blah.com", "password"=>"[FILTERED]"}}

这就是发生的事情

# 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"}

同样的事情发生在 JSON 上。

【问题讨论】:

    标签: ruby-on-rails xml json ruby-on-rails-3 api


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

      运行rake middleware,检查是否使用了ActionDispatch::ParamsParser。 看看actionpack-3.0.7/lib/action_dispatch/middleware/params_parser.rb 这是将提供的数据解析为 params 哈希的中间件。我的猜测是问题出在 curl 上,因为它没有像您认为的那样发布请求。也许它需要一个冒号后的空格(在标题中),我不知道。我在谷歌上找到了这个:http://snippets.dzone.com/posts/show/181

      【讨论】:

        猜你喜欢
        • 2020-09-28
        • 1970-01-01
        • 2012-10-06
        • 2011-10-29
        • 2010-10-08
        • 1970-01-01
        • 1970-01-01
        • 2018-08-18
        相关资源
        最近更新 更多