Вернуть сообщение об ошибке в ответе XML - PullRequest
2 голосов
/ 22 декабря 2011

Я работаю над API моего веб-приложения.Это приложение на Rails 2, а REST API отвечает на XML.

Например, мне нужно вернуть ошибку, если не удалось отписаться от контакта в списке.Поэтому я отвечаю с помощью Unprocessable Entity (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 ]

1 голос
/ 22 декабря 2011

Это не выглядит правильно для меня:

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 голосов
/ 22 декабря 2011

Документация Rails ActiveResource Validation гласит, что она ожидает ошибки в формате XML:

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

Я думаю, что оно разработано исходя из хеша ошибок проверки объекта (например, render :xml => record.errors).Не совсем уверен, почему вы хотите поймать исключение, хотя это должно указывать на гораздо более серьезную проблему, более похожую на ошибку сервера.

...