Spring ResponseErrorHandler без разбора объектов - PullRequest
0 голосов
/ 17 сентября 2018

Я использую SpringBoot с RestTemplate для связи с другим приложением. Однако я не могу изменить его API, и этот внешний сервис всегда возвращает код возврата 200OK.

По умолчанию у нас есть ResponseErrorHandler, который реагирует на все коды ответов 4xx и 5xx, но в моем случае, когда возникает исключение, я получаю 200OK с одним полем JSON errors.

Я создал собственный обработчик ошибок и включил его в свой шаблон отдыха, используя:

restTemplate.errorHandler(new MyCustomErrorHandler());

Я также переопределил hasError() метод, но внутри я должен проанализировать этот объект, чтобы проверить, содержит ли он поля с ошибками ...

Это хороший подход для обработки ошибок? Должен ли я разобрать ответ дважды? Я ищу чистое решение для таких проблем, но я хочу избежать разбора сообщения дважды каждый раз, когда я использую внешнюю службу

1 Ответ

0 голосов
/ 17 сентября 2018

Обработчик ошибок будет вызываться только в том случае, если возвращается состояние ошибки, 200 не является состоянием ошибки, поэтому он не обрабатывается.

Вы можете изменить это поведение, переопределив метод hasError ResponseErrorHandler для проверки сообщения об ошибке или любого указания на ошибку.

public class MyCustomErrorHandler implements ResponseErrorHandler {

@Override
public boolean hasError(ClientHttpResponse httpResponse) 
        throws IOException {

    //TODO check your criteria for error
}
...