spring-integration - Spring 集成 Java DSL 入站和出站错误处理
问题描述
我正在尝试构建一个集成解决方案
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
我的出站网关定义为
Http.outboundGateway(uri, resttemplate)
...
.get()
new RestTemplate(requestFactory)
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 调用返回错误响应时 .transform(exetrnaldto to dto) 失败并且客户端得到 500
- 我也想将错误响应 json 转换为我的 json
- 我如何处理错误情况。
我的问题是;
- 如何处理错误。
- 在错误情况下如何停止流不转换
- 如何从出站向客户端发送状态码作为响应(这很重要)
- 如何处理典型的@Controller Advice @ErrorHandler 机制或类似的错误。
希望Garry能看到这篇文章,找不到任何答案,我翻了很多书和论坛,感觉 Java DSL 还没有被广泛使用或评论。
解决方案
您的问题中没有特定的 Spring Integration Java DSL。它实际上更多地是关于如何在服务器端(MVC - HttpInboundGateway)和客户端 -RestTemplate
以及 HttpOutboundGateway 处理 HTTP 错误。Java DSL 只是现有技术和解决方案的语法糖。
所以,这@Controller Advice @ErrorHandler
是一个 MVC,服务器端。您绝对可以使其与 HttpInboundGateway 一起使用,但对于客户端 REST 调用来说,这确实是错误的方向。
看起来您想为您的 .handle(outBoundGateway)
. 考虑ExpressionEvaluatingRequestHandlerAdvice
与 that 一起使用retryAdvice
。因此,您将能够使用它failureChannel
来处理异常并将其分别转换为所需的 JSON。
推荐阅读
- c# - OpenId 连接身份验证 .NET Core
- mysql - 在mysql中定义分隔符
- c - C:使用指针的数组求和
- elasticsearch - 使用新管道为 Elasticsearch 重新处理数据
- scala - sbt - 运行 mocha 测试时出现双重释放或损坏 (!prev) 错误
- python - 使用列表查找 Python 矩阵中的对角线
- shopify - Shopify - 添加页脚导航
- scala - 如何在scala中调用具有另一个函数作为参数的函数?
- azure-sql-database - 谁创建了这个扩展活动会话?
- css - 带有计数器标识符“list-item”的奇怪浏览器行为