当前位置: 首页 > 知识库问答 >
问题:

Spring集成Java DSL入站和出站错误处理

阎劲
2023-03-14

我正在尝试构建一个集成解决方案,其中

IntegrationFlows
  .from(inBoundGateway)
  .enrichHeaders(enrichHeaders())
  .transform(dto to externaldto)
  .handle(outBoundGateway, advice -> advice.advice(retryAdvice()))
  .transform(exetrnaldto to dto)
  .get()

  @Bean
  RequestHandlerRetryAdvice rhra
  rhra.setRecoveryCalBack(errorMessgaeRecoverer());

  @Bean
  ErrorMessageSendingRecoverer errorMessgaeRecoverer

我的outboundgateway定义为

Http.outboundGateway(uri, resttemplate)
 ...
 .get()


new RestTemplate(requestFactory)

请求工厂在哪里

TrustStratgey ts = new TrustStratgey(){
 public boolean isTrusted(...){
   return true;
 }
}
SSLContext context = SSLContexts,custom().loaddTrustMaterials(null, ts);
SSLContextFactory cf = new SSLContextFactory(context, new NoopHostnameVerifier());
HttpClientBuilder clientBuilder ..
clientBuilder.setSSLSocketFactory()

快乐之路运行良好,我面临的问题是不太快乐的道路。

  • 当Api调用返回错误响应时。转换(exetrnaldto到dto)失败,客户端获得500
  • 我想把error resposne json也翻译成我的json
  • 我如何处理错误情况

我的问题是:

  1. 如何处理错误。
  2. 在错误条件下如何停止流不转换
  3. 如何将状态代码从出站发送到客户端(这很重要)
  4. 如何处理像典型的@Controller建议@ErrorHandler机制或类似的错误。

希望Garry看到这篇帖子,找不到任何答案,我看了很多书和论坛,感觉Java DSL还没有被广泛使用或评论。

共有1个答案

赵景曜
2023-03-14

您的问题中没有任何Spring集成JavaDSL特定的内容。它实际上更多的是关于如何在服务器端(MVC-HttpIn边界网关)和客户端-RestTemboard和HttpOut边界网关上处理HTTP错误。JavaDSL只是现有技术和解决方案的语法糖。

因此,@Controller Advie@ErrorHandler是一个MVC,服务器端。您肯定可以让它与HttpInbnGateway一起工作,但对于客户端REST调用来说,这确实是错误的方向。

看起来您希望捕捉到该代码的REST错误调用。句柄(outBoundGateway)。考虑使用表达式Evaluating RequestHandlerAdvice和retryAdvice。因此,您将能够使用其故障通道处理异常,并将其分别转换为所需的JSON。

在文档中查看更多信息:https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#expression-建议

 类似资料:
  • 我如何处理在Spring整合中未能向Kafka传达的信息? 我在“int kafka:outbound channel adapter”中没有看到“error channel”是一个选项,我想知道应该在哪里添加错误通道信息,以便我的ErrorHandler可以获得“failed to kafka”类型的错误。(包括所有类型的故障、配置、网络等) 此外,inputToKafka是排队通道,我应该在哪

  • 基础知识: 使用带集成的Spring 4.1.1,引导和1.0.0的DSL。 多个入站SFTP适配器在不同的时间表上从不同的供应商获取文件。 每个集成流在文件下载后将标头附加到消息中,以标识供应商源。 使用MessagePublishingErrorHandler处理异常。 标准消息流在消息处理成功或消息未能完成时通知外部监控解决方案。使用消息头来识别哪个流失败。 在我们收到消息后,成功和错误流都

  • 我正在尝试将spring集成配置为向队列发送消息,然后接收消息,即非常简单的事情: 我认为解耦所必需的是在流程的两端都有一个消息网关。因此,我的第一次尝试(有效)如下所示: 其中MessageReceiverHandler()是扩展AbstractMessageHandler的bean。 所以上面我们有一个用于出站消息的消息网关。我假设我们也应该有一个用于入站消息的网关,允许我们将传入消息处理与应

  • 问题内容: 入站和出站通道适配器之间的根本区别是什么? 任何示例都将非常有帮助。 我已经查看过Spring文档,这种“方向性”的区别对我来说还不清楚。我支持配置了outbound-channel-adapter的应用程序,但是我发现使用 出站 标签可以直观地了解行为计数器。该适配器获取一个外部文件,然后 将其 引入应用程序中, 在 该应用程序中我们解析文件并保留数据。 这类似于这个问题,但是我想更

  • 考虑使用Spring集成进行动态入站/出站配置。使用我们的系统的客户可能有n个,每个客户都有自己的入站FTP/webservice配置,以便将文件拉入我们的系统进行处理。同样,在处理完这些数据之后,每个客户都可以进行出站FTP/webservice配置,需要在其中推送报告(最终结果)。spring集成是否适合这种情况?如果是的话,请你推荐或指出其中的任何一个例子。Webservice包括REST和

  • 假设您有一个具有入站HTTP接口的应用程序(我们称之为B)(需要使用HTTP)。将来,您将从几个不同的其他应用程序中调用它,但目前您只想开发一个客户端(让我们称之为)。因此,在A中,有一个出站HTTP网关: 是否可以在这两个应用程序之间共享代码,例如HTTP API定义,如路径(例如“/你好”)、方法(GET、POST、PUT…),可能是参数/其类型/响应?如果是,如何? 我想使用JavaDSL,