在XML响应中返回错误消息

时间:2011-12-22 12:50:26

标签: ruby-on-rails xml rest activeresource

我正在研究我的网络应用的API。它是一个Rails 2应用程序,REST API响应XML。

例如,我需要返回错误,以防它无法取消订阅列表中的联系人。所以我用一个不可处理的实体(422)回复,并在XML中显示错误消息。这是实际的代码:

respond_to do |format|
  begin
    ...
    format.xml  { head :ok }
  rescue => e
    format.xml  { render :xml => e.to_s, :status => :unprocessable_entity }
  end
end

问题是,在另一方面,当有人使用ActiveResouce进行请求时,错误到达且消息为空,如下所示:

ActiveResource::ResourceInvalid: Failed.  Response code = 422.  Response message = . 

我需要在响应中放置任何XML结构或标记,响应消息不是空的吗?

由于

2 个答案:

答案 0 :(得分:1)

这对我来说不正确:

format.xml  { render :xml => e.to_s, :status => :unprocessable_entity }

render :xml,应该传递一个XML字符串。尝试用以下内容替换它:

format.xml  { render :xml => "<message ='#{e.to_s}'/>", :status => :unprocessable_entity }

答案 1 :(得分:0)

Rails ActiveResource Validation文档声明它预期XML格式的错误:

<errors><error>First cannot be empty</error></errors>

我认为这是为了来自对象验证错误哈希(例如render :xml => record.errors)。不确定为什么你会想要捕获异常,因为这应该表明更严重的问题更类似于服务器错误。