Как обрабатывать код возврата 404 (по замыслу) в int-http:outbound-gateway?

Я кодирую маршрут Spring Integration, который запрашивает SOAP и REST WS и каким-то образом агрегирует результаты. Я использую bean-компонент в качестве полезной нагрузки, чтобы собрать полезную информацию по пути, два обогащателя полезной нагрузки для запроса веб-сервисов и преобразователь в конце для получения результата.

Теперь моя проблема в том, что REST WS возвращает (по замыслу) HttpStatus.NOT_FOUND (404), если в системе нет информации об объекте, который я запрашиваю. Это необходимо рассматривать как номинальный вариант использования. Spring Integration считает это по умолчанию ошибкой и выручает. Мне нужно правильно обработать этот случай, сохранить ноль в моем бобе или что-то подобное (я могу справиться с этим в будущем) и продолжить.

Поэтому я попытался добавить обработчик ошибок к исходящему шлюзу, но не смог заставить это работать. Если я скажу, что это не ошибка (переопределение hasError()), то SI попытается разобрать тело ответа, что, очевидно, не работает; То же самое, если я переопределить handleError() и ничего не делать.

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

1 ответ

Решение

Вы можете добавить для <int-http:outbound-gateway> ExpressionEvaluatingRequestHandlerAdvice как вложенный <request-handler-advice-chain> и используйте его параметры: onFailureExpression, returnFailureExpressionResult = true, Вы также можете рассмотреть возможность использования failureChannel,

Таким образом, вы поймаете это 404 NOT FOUND исключение и вернуть то, что вы считаете подходящим результатом компенсации.

Более подробную информацию вы можете найти в Справочном руководстве, а также есть пример проекта по этому вопросу.

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