Spring ResponseErrorHandler без разбора объектов

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

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

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

restTemplate.errorHandler(new MyCustomErrorHandler());

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

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
139
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

public class MyCustomErrorHandler implements ResponseErrorHandler {

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

    //TODO check your criteria for error
}

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

Tomasz Bawor 17.09.2018 10:13

Другие вопросы по теме