gpt4 book ai didi

java - 入站网关中的 HttpMessageConverter 错误处理

转载 作者:行者123 更新时间:2023-12-02 03:28:25 25 4
gpt4 key购买 nike

当在入站网关中使用消息转换器发生转换错误时,我遇到了奇怪的行为。下面示例中的想法是接收 XML 有效负载(或序列化 java),将它们转换为 java 对象并使用相同的媒体类型进行响应。

鉴于此配置:

<bean id="converterXml" class="org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter" />
<bean id="converterSerialized" class="org.springframework.integration.http.converter.SerializingHttpMessageConverter" />

<util:list id="converters">
<ref bean="converterXml" />
<ref bean="converterSerialized" />
</util:list>

<int-http:inbound-gateway id="inboundIntegrationGateway"
view-name="/integration"
message-converters="converters" error-channel="errorChannel"
request-payload-type="MyXmlPojo"
supported-methods="POST" request-channel="inboundIntegration"
path="/services/integration"
reply-timeout="50000">
</int-http:inbound-gateway>

如果提交了无效的 XML 有效负载(例如没有结束标记),则 JAXB XML 转换器中引发的异常 HttpMessageNotReadableException 不会在 errorChannel 中转发(我在其中定义了一个服务激活器来处理异常) )。请注意,此处理程序负载转换后运行良好。

<int:service-activator input-channel="errorChannel" ref="exceptionHandlerService"
method="handleException" requires-reply="true" />

我在这里缺少什么?为什么我的错误处理程序没有处理 HttpMessageNotReadableException?欢迎任何帮助!

最佳答案

Why is the HttpMessageNotReadableException not handled by my error handler?

仅当我们已经向下游流发送 Message 时,error-channel 才会生效,但如果您传入的 HTTP 请求无法转换为 消息,仍然没有任何内容可以发送到错误 channel

是的,使用 convertExceptions = true 我们不能只按原样返回异常并让一些 HttpMessageConverter 将其转换为合理的 HTTP 响应。通常,SerializingHttpMessageConverter 就在现场。

Why is this exception not wrapped in a MessageHandlingException and sent to my error handler?

只是因为我们还没有达到消息传递的目的。对于你的问题,我们仍然处于标准的 Spring MVC 环境中,并且 Spring Integration 在请求转换期间仍然无能为力。

您应该考虑 Spring MVC 为您的情况提供的一些解决方案:http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-exceptionhandlers

关于java - 入站网关中的 HttpMessageConverter 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38455467/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com