Ruby on rails休息客户端,处理错误响应

Joe*_*oel 4 json ruby-on-rails rest-client

我是红宝石的新手(也是编程)

我已经构建了这段代码:

    #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
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试处理一个案例,任何网址的响应代码都不正常,我想用错误消息"error"替换它

我试图用这段代码替换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
Run Code Online (Sandbox Code Playgroud)

但是如果来自网址的响应不是200,我收到错误消息"406不可接受"而不是"错误"

提前致谢

Eug*_*Zol 6

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

  • 对于200到207之间的结果代码,将返回RestClient :: Response
  • 对于结果代码301,302或307,如果请求是GET或HEAD,则将遵循重定向
  • 对于结果代码303,将遵循重定向并将请求转换为GET
  • 对于其他情况,将引发一个包含Response的RestClient :: Exception; 将针对已知错误代码抛出特定的异常类
  • 在异常上调用.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
Run Code Online (Sandbox Code Playgroud)

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

Ruby例外

  • 完美的!`def get url result = RestClient::Request.execute(method: :get, url: url) JSON.parse(result)rescue RestClient::Exception => e e.response.body e.response.code end` (2认同)