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

How to handle 404 return code (by design) in int-http:outbound-gateway?

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

现在我的问题是如果系统没有关于我正在查询的实体的信息,REST WS returns(设计)HttpStatus.NOT_FOUND (404)。这需要被视为一个名义上的用例。 Spring Integration 默认认为这是一个错误并退出。我需要正确处理这种情况,将 null 存储在我的 bean 或类似的东西中(我可以在路上处理它)然后继续。

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

也许我没有朝着正确的方向前进,但我错过了一个更好的主意,所以...感激地接受任何帮助。

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

这样你就可以捕捉到 404 NOT FOUND 异常和 return 任何你认为合适的补偿结果。

您可以在有关此事的 Reference Manual and there is also a sample 项目中找到更多信息。