尽管添加了 :json 中间件,但法拉第仍未解析错误响应

问题描述

我以这种方式初始化我的法拉第客户端:

@client = Faraday.new(url: BASE_URL) do |faraday|
  faraday.request  :json
  faraday.response :json

  faraday.response :raise_error
end

当我拯救 Faraday::ClientError 时,响应的正文如下所示:

irb> e.response[:body]
"{\"error\":\"access_denied\",\"error_description\":\"Unauthorized\"}"

我希望它被解析并让主体成为一个哈希。我做错了什么?

解决方法

在 Faraday 中,the order of registration of middlewares matter 因为它是一个管道(类似于 Rack)。

因此,如果您将 :raise_error 中间件放在 :json 之前,错误的正文将被解析。

@client = Faraday.new(url: BASE_URL) do |faraday|
  faraday.request  :json

  faraday.response :raise_error
  faraday.response :json
end

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...