2011-12-22 198 views
2

我正在使用我的web應用程序的API。它是一個Rails 2應用程序,REST API響應XML。以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結構或標記我需要放在響應中,對Response消息不要爲空?

感謝

+0

我會檢查一個調試器,無論錯誤format.xml被調用 - callstack可能會不同。 – Reactormonk 2011-12-22 13:38:56

回答

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 } 
+0

謝謝。 我試了一下,但是錯誤信息仍然是空的。 – pedroaxl 2011-12-22 16:21:41

0

Rails的的ActiveResource驗證文件指出,它預計的XML格式錯誤:

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

我覺得它的設計來自於對象驗證錯誤哈希(例如render :xml => record.errors)。不知道爲什麼你會想要捕捉異常,但應該表明一個更嚴重的問題,更類似於服務器錯誤。