如何在int-http:outbound-gateway中处理404返回码(按设计)?

时间:2018-03-12 19:41:09

标签: rest spring-integration spring-integration-http

我编写一个查询SOAP和REST WS的Spring Integration路由,并以某种方式聚合结果。我使用bean作为有效负载来收集有用的信息,两个有效负载丰富程序用于查询Web服务,最后使用变换器来构建结果。

现在我的问题是,如果系统没有关于我正在查询的实体的信息,REST WS会返回(按设计)HttpStatus.NOT_FOUND(404)。这需要被视为名义用例。 Spring Integration默认将此视为错误并将其解除。我需要正确处理这个案例,在我的bean或类似的东西中存储null(我可以处理它)并继续。

所以我尝试将错误处理程序添加到出站网关但无法使其工作。如果我告诉这不是一个错误(覆盖hasError()),那么SI会尝试解组响应的主体,这显然不起作用;如果我覆盖handleError()并且什么也不做,那就相同。

也许我没有朝着正确的方向前进,但我错过了一个更好的主意,所以......任何帮助都会得到感激之情。

1 个答案:

答案 0 :(得分:1)

您可以将<int-http:outbound-gateway> ExpressionEvaluatingRequestHandlerAdvice添加为嵌套<request-handler-advice-chain>并使用其选项:onFailureExpressionreturnFailureExpressionResult = true。您也可以考虑使用failureChannel

这样你就可以捕获404 NOT FOUND异常并返回你认为合适的补偿结果。

您可以在Reference Manual找到更多信息,此外还有一个sample项目。