我正在构建一个 Web 服务应用程序,我正在尝试很好地处理一个 422 页面,将 POST 的 JSON 发送回用户,以更好地调试错误。为此,我使用 request.request_parameters 来取回我发送的 JSON,但它碰巧以有线方式组织(对我来说),我真的不能只用原始数据取回它
我作为 JSON 发送的是这个。
{
"name":"New set intensity",
"properties":
[
{"uri":null,"value":"on"},
{"uri":"https://type.lelylan.com/properties/intensity","value":"100.0"}
]
}
我从 request.request_parameters 得到的是这个。
{"{\"name\":\"New set intensity\",\"properties\":"=>{"{\"uri\":null,\"value\":\"on\"}, {\"uri\":\"https://type.lelylan.com/properties/intensity\",\"value\":\"100.0\"}"=>{"}"=>nil}}}
我的主要问题是内容以某种方式成为关键,并且在内部递归。有没有办法取回干净的数据?非常感谢。
更新:我试图更好地了解此问题发生的位置和原因。
在我的控制器中,我尝试以我知道的两种可用方式进行访问。
# request.body.read.inspect
"{\"name\":\"New set intensity\",\"properties\":[{\"uri\":\"not_valid\"}]}"
# request.request_parameters
{"{\"name\":\"New set intensity\",\"properties\":"=>{"{\"uri\":\"not_valid\"}"=>{"}"=>nil}}}
请求来自 Capybara
page.driver.post(@uri, @params.to_json)
控制器只返回 JSON,所以这就是我定义它的方式。我没有放“respond_to”和“respond_with”,当我提出请求时,它会呈现 json 视图 show.rabl.json。这让我认为它可以识别正确的格式。
class FunctionsController < ApplicationController
before_filter
...
def index
...
end
def show
..
end
def create
body = JSON.parse(request.body.read)
@function = Function.new(body)
if @function.save
render 'show', status: 201, location: FunctionDecorator.decorate(@function).uri
else
render_422 "notifications.resource.not_valid", @function.errors
end
end
谢谢。