0

我正在构建一个 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

谢谢。

4

0 回答 0