【问题标题】:Spring Boot: Get JSON body when RESTFul error (404, 403, 500) occursSpring Boot:发生 RESTFul 错误(404、403、500)时获取 JSON 正文
【发布时间】:2018-02-23 12:25:18
【问题描述】:

我正在创建一个调用 RESTful 端点(通过 GET 方法)的应用程序,如果响应是状态码 200,它会返回一个包含有用数据的 JSON。

这是通过以下行实现的:

ResponseEntity<CorrectResponseObject> response = restTemplate.exchange(requestEntity, CorrectResponseObject.class);

但是,如果我使用 200 以外的状态代码(例如 403、404)点击 URL,则在使用 POSTman 时会检索到不同的 JSON:

{
    "timestamp": 1505383198800,
    "status": 403,
    "error": "Forbidden",
    "exception": "org.springframework.security.access.AccessDeniedException",
    "message": "Access is denied",
    "path": "/api/test/client/abcd"
}

但在我的 Java 程序执行以下行之后:

ResponseEntity<CorrectResponseObject> response = restTemplate.exchange(requestEntity, CorrectResponseObject.class);

抛出一个错误:

org.springframework.web.client.HttpClientErrorException: 403 Forbidden
    at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:63)
    at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:700)

    ...
    ...

...这是完全有效的,但是我希望我的 Java 代码显示,如果我得到一个 403 异常来代替查看 POSTman 显示的 JSON,包括路径、消息时间戳等。

有没有办法做到这一点?

谢谢。

【问题讨论】:

  • 使用 try catch 块,你也可以这样做
  • 即使使用 try 块,如果请求中发生错误,response 也会变为 null。因此,您无法获取包含有用错误信息的 JSON 正文,例如 timestampmessagepath 等。

标签: java spring rest spring-boot spring-restcontroller


【解决方案1】:

这样就可以了。

    try {
      ResponseEntity<CorrectResponseObject> response = restTemplate.exchange(requestEntity, CorrectResponseObject.class);
    }catch (HttpClientErrorException exception) {
      System.out.println(exception.getStatusCode());
      System.out.println(exception.getResponseBodyAsString())
    }

【讨论】:

  • @pvpkiran 你的答案中的“SOP”是什么?
  • System.out.println
猜你喜欢
  • 2022-01-10
  • 2021-05-14
  • 1970-01-01
  • 2019-07-26
  • 2018-03-13
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
相关资源
最近更新 更多