2015-08-08 82 views
1

我在红宝石是新的(和编程太)Ruby on Rails的REST客户端,处理错误响应

我已经建立了这个代码:

#This method executing a url and give the response in json format 
    def get url 
     return JSON.parse(RestClient::Request.execute(method: :get, url: url)) 
    end 

而现在我想处理情况下,从任何URL的响应代码是不正常的,我想用错误信息“错误”

我曾尝试使用此代码来代替get方法来替代它:

def get url 
if ((RestClient::Request.execute(method: :get, url: url)).code == 200) 
    return JSON.parse(RestClient::Request.execute(method: :get, url: url)) 
else 
    error = "error" 
    return error.as_json 
end 
end 

但是,如果从URL的响应不是200,我得到一个错误消息“406不能接受的”,而不是“错误”

在此先感谢

回答

4

RestClient::Request当接收错误响应(会引发异常比2XX/3XX其他响应码):

  • 为200和207之间的结果代码,一个RESTClient实现::响应将被用于结果代码301,302或30返回
  • 如图7所示,如果请求是GET,则重定向将被遵循,或者针对结果代码303,重定向将被跟随,并且请求被转换成GET
  • ,其他情况下,RestClient :: Exception持有会提出回应;一个特定的异常类将抛出已知错误代码
  • 调用.response除外上获得服务器的响应

Documentation

你应该处理该异常:

def get url 
    result = RestClient::Request.execute(method: :get, url: url) 
    JSON.parse(result) 
rescue RestClient::Exception 
    "error" # no need to call 'as_json' 
end 

有关Ruby异常处理的更多信息:

Ruby Exceptions

+0

非常感谢! – Joel

+0

不客气! – EugZol