【问题标题】:Spring HttpClientErrorException provides no details from response bodySpring HttpClientErrorException 没有提供响应正文的详细信息
【发布时间】:2016-06-03 17:06:40
【问题描述】:

我正在更新使用 Spring 3.1 Framework 的 RestTemplate 类的 exchange 方法的旧代码。我遇到了似乎是一个重大的细节遗漏。当我尝试与之通信的其余客户端返回 400 状态代码时,会抛出 HttpClientErrorException 但没有响应正文来提供有关服务器拒绝请求的原因的详细信息。似乎没有办法检索可以提供非常有用信息的响应正文。

我不需要弄清楚我的调用代码有什么问题,因为我已经这样做了。我只是想知道如果调用发生错误,我是否可以通过某种方式访问​​和记录 HTTP 响应的正文。

【问题讨论】:

  • 从代码看来,所有信息都包含在HttpClientErrorException中:DefaultResponseErrorHandler@90
  • 感谢您的评论。抛出异常时没有响应正文。这就是我与堆栈跟踪一起返回的所有内容。 org.springframework.web.client.HttpClientErrorException: 400 Bad Request
  • 啊...没关系,我看到了。异常上有一个实际的方法来获取响应体。
  • 您收到回复了吗?我的 HttpClientErrorException 没有正文,但经过测试的请求(使用 RestTemplate)返回带有 JSON 的状态 401,我无法获得
  • 下面的答案显示了您可以使用的两种方法来获取 HTTP 响应正文。这对您不起作用吗?

标签: java spring rest


【解决方案1】:

响应体实际上是 HttpClientErrorException 的一个属性。它可以通过继承自其父类 HttpStatusCodeException 的以下两个访问器访问:

public byte[] getResponseBodyAsByteArray()
public String getResponseBodyAsString()

【讨论】:

    【解决方案2】:

    将您的 HttpClientErrorException e 转换为 HttpStatusCodeException:

    ((org.springframework.web.client.HttpStatusCodeException) e).getResponseBodyAsString()
    

    【讨论】:

    • 不需要强制转换。 HttpClientErrorException 已经从 HttpStatusCodeException 继承了该方法。
    猜你喜欢
    • 2021-08-02
    • 2011-11-02
    • 2016-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多