Отсутствует тело ответа от RestClientResponseException в Spring REST-ответ - PullRequest
0 голосов
/ 15 мая 2018

В моем приложении 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 из исключения?

1 Ответ

0 голосов
/ 16 мая 2018

Спасибо за комментарий @Hemant Patel, после попытки установить новый ErrorHandler, я понял, что единственное, что мне нужно установить, - это новая фабрика запросов:

restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());

И эта фабрикавозможность установить тело ответа в фоновом режиме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...