В моем приложении Spring Boot REST У меня есть конечная точка, где я делаю некоторые вещи. Там у меня также есть @Provider
, где я могу поймать и отобразить все исключения, возникшие в процессе:
@Provider
public class GenericExceptionMapper implements ExceptionMapper<Throwable> {
@Override
public Response toResponse(Throwable ex) {
ErrorObject error = new ErrorObject("INTERNAL", 500, ex.getMessage());
return Response.status(error.getStatus()).entity(error).type(MediaType.APPLICATION_JSON).build();
}
}
ErrorObject
- это просто базовое pojo с некоторой информацией:
public class ErrorObject implements Serializable {
private static final long serialVersionUID = 4181809471936547469L;
public ErrorObject(String name, int status, String message) {
this.name = name;
this.status = status;
this.message = message;
}
private String name;
private int status;
private String message;
setters/getters
}
Если я позвоню своей конечной точке с почтальоном , я получу этот ответ, если возникнет исключение, и это идеально:
{
"name": "INTERNAL",
"status": 500,
"message": "something happened",
}
Но когда я вызываю конечную точку в моем приложении , я ловлю RestClientResponseException
(что в основном HttpClientErrorException
), я вижу в исключении, что это было 500, но нет тела , пусто.
Вот как я называю это в моем приложении:
try {
ResponseEntity<WhateverObject> entity = restTemplate.exchange(url, HttpMethod.POST, getBaseHeadersAsHttpEntity(), WhateverObject.class);
//...
} catch (RestClientResponseException e) {
//... ErrorObject of exception is missing here
}
Как получить одно и то же тело в случае исключения, поэтому мой собственный объект ErrorObject из исключения?