我正在研究我的网络应用的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结构或标记,响应消息不是空的吗?
由于
答案 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
)。不确定为什么你会想要捕获异常,因为这应该表明更严重的问题更类似于服务器错误。