Spring Boot:发生RESTFul错误(404,403,500)时获取JSON主体

时间:2017-09-14 13:27:43

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

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

这可以通过以下方式实现:

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

但是,如果我点击状态代码不是200的URL(例如403,404),则在使用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 Exception而不是查看 POSTman显示的JSON,包括路径,消息时间戳等

有没有办法实现这个目标?

感谢。

1 个答案:

答案 0 :(得分:2)

这样的事情会发生。

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