Ruby on rails RubyonRails rest客户端,处理错误响应

Ruby on rails RubyonRails rest客户端,处理错误响应,ruby-on-rails,json,rest-client,Ruby On Rails,Json,Rest Client,我是ruby新手(编程也是如此) 我构建了以下代码: #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 def get url if ((RestClient::Request.execute(metho

我是ruby新手(编程也是如此)

我构建了以下代码:

    #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
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的响应代码都不正常,我想用错误消息“error”替换它

我已尝试用以下代码替换get方法:

    #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
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不可接受”,而不是“错误”


提前感谢

RestClient::Request
在收到错误响应(响应代码不是2xx/3xx)时将引发异常:

  • 对于介于200和207之间的结果代码,将返回RestClient::响应
  • 对于结果代码301、302或307,如果请求是GET或HEAD,则将遵循重定向
  • 对于结果代码303,将遵循重定向并将请求转换为GET
  • 对于其他情况,将引发包含响应的RestClient::异常;将为已知错误代码引发特定的异常类
  • 对异常调用.response以获取服务器的响应

您应该处理该异常:

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异常处理的更多信息:


完美
def get url result=RestClient::Request.execute(method::get,url:url)JSON.parse(result)rescue RestClient::Exception=>e.response.body e.response.code end