【问题标题】:How to handle 404 return code (by design) in int-http:outbound-gateway?如何在 int-http:outbound-gateway 中处理 404 返回码(按设计)?
【发布时间】:2018-03-12 19:41:08
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    您可以在Reference Manual 中找到更多信息,还有一个关于此事的sample 项目。

    【讨论】:

    • 谢谢!我花了几天时间才弄清楚确切的设置,但这绝对是要走的路。很高兴看到文档存在,即使它不是我所期望的;-) 指向文档和示例的两个指针特别有用(非常感谢)。
    • @Her-Bak 虽然自发布以来已经有一段时间了,但如果您能够使用“精确设置”更新此答案或您的问题,这将对 Spring 集成非常有帮助知识库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多