【发布时间】: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 正文,例如timestamp、message、path等。
标签: java spring rest spring-boot spring-restcontroller