2

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

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

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

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

4

1 回答 1

1

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

通过这种方式,您可以捕获该404 NOT FOUND异常并返回您认为合适的补偿结果。

您可以在参考手册中找到更多信息,并且还有一个关于此问题的示例项目。

于 2018-03-12T20:21:59.417 回答