Как обрабатывать код возврата 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
исключение и вернуть то, что вы считаете подходящим результатом компенсации.
Более подробную информацию вы можете найти в Справочном руководстве, а также есть пример проекта по этому вопросу.