首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用java DSL在Spring集成中创建自定义错误响应

如何使用java DSL在Spring集成中创建自定义错误响应
EN

Stack Overflow用户
提问于 2022-08-10 13:22:09
回答 1查看 42关注 0票数 2

我有以下简单的代理集成流程。其主要任务是接收来自代理的请求,将其发送到实际端点,获取响应并将其发送回客户端。

代码语言:javascript
运行
复制
@SpringBootApplication
@EnableIntegration
public class IntegrationApp {


@Value("${narko.pin}")
private String pinUrl;



public static void main(String[] args) {
    SpringApplication.run(MinzdravApplication.class, args);
}

@Bean
public DirectChannel requestPinChannel() {
    return new DirectChannel();
}

@Bean
public DirectChannel replyPinChannel() {
    return new DirectChannel();
}



@Bean
public IntegrationFlow httpProxyFlowPin() throws Exception {
    return IntegrationFlows
            .from(Http.inboundGateway("/narko/api/patient/by-pinpp")
                    .requestChannel(requestPinChannel()).replyChannel(replyPinChannel())
                    .mappedRequestHeaders("activityid")
                    .errorChannel("httpProxyErrorFlow.input")
             )
            .wireTap(sf->sf.handle(new InwardMessageHandler()))
            .enrichHeaders(h -> h.header("Content-Type", "application/json"))
            .handle(Http.outboundGateway(pinUrl).charset("utf-8")
                    .expectedResponseType(String.class))
            .channel(replyPinChannel())
            .get();
}


@Bean
public IntegrationFlow httpProxyErrorFlow() {
    return f -> f
            .transform(Throwable::getCause)
            .<HttpClientErrorException>handle((p, h) ->
                    new RuntimeException("custom exception"));
}

}

当出站网关的api关闭时。我有以下错误:

代码语言:javascript
运行
复制
{
   "timestamp": "2022-08-10T12:51:58.561+00:00",
   "status": 500,
   "error": "Internal Server Error",
   "path": "/narko/api/patient/by-pinpp"
}

我在日志上有以下例外:

代码语言:javascript
运行
复制
java.lang.ClassCastException: class org.springframework.web.client.ResourceAccessException cannot be cast to class org.springframework.web.client.HttpClientErrorException (org.springframework.web.client.ResourceAccessException and org.springframework.web.client.HttpClientErrorException are in unnamed module of loader 'app')
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.integration.handler.LambdaMessageProcessor.processMessage(LambdaMessageProcessor.java:104) ~[spring-integration-core-5.5.10.jar:5.5.10]
at org.springframework.integration.handler.ServiceActivatingHandler.handleRequestMessage(ServiceActivatingHandler.java:105) ~[spring-integration-core-5.5.10.jar:5.5.10]
at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:136) ~[spring-integration-core-5.5.10.jar:5.5.10]
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:56) ~[spring-integration-core-5.5.10.jar:5.5.10]
at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:115) ~[spring-integration-core-5.5.10.jar:5.5.10]
at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:133) ~[spring-integration-core-5.5.10.jar:5.5.10]
at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:106) ~[spring-integration-core-5.5.10.jar:5.5.10]

如何创建自定义异常响应?任何导航或提示都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-10 14:27:27

首先,您不需要.replyChannel(replyPinChannel().channel(replyPinChannel())。入站网关发送带有replyChannel头的消息,这是流中最后一个应答端点,而不是创建它的outputChannel,它将与该replyChannel进行协商。

其次,关于错误处理程序的解决方案是可以的,但是您可以看到自己处在堆栈跟踪中,只是没有转换成正确的类型:ResourceAccessException不是HttpClientErrorException的一个实例。请考虑期待一个RestClientException,这对于ResourceAccessExceptionHttpClientErrorException来说都是超级的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73307102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档