http-inbound-gateway中的错误通道不会捕获消息转换器中发生的消息传递异常

时间:2017-05-10 10:41:56

标签: java spring spring-integration

<int-http:inbound-gateway id="inboundGateway"
                       path="inboundEndpoint"
                       supported-methods="PUT" request-payload-type="customJsonType"
                       message-converters="jacksonJSONConverter"
                       merge-with-default-converters="true"
                       error-channel="inboundErrorChannel"
                       request-channel="SendChannel"
                       reply-channel="ReplyChannel"/>

<int:channel id="SendChannel" />

<int:channel id="ReplyChannel" />

<int:channel id="inboundErrorChannel" />

<int:service-activator input-channel="inboundErrorChannel" ref="customErrorHandler" method="handle"/>

<bean id="customErrorHandler" class="CustomErrorHandler"/>

以及这里的经纪人。

public class CustomErrorHandler {

    private Logger logger = LoggerFactory.getLogger(this.getClass());
    public void handle(Message<?> message) {
    logger.debug("payload: {}", message.getPayload());
    }
}

当我将PUT curl命令发送到/ inboundEndpoint时, 它返回这样的错误消息,

org.springframework.messaging.MessagingException: Could not convert request: no suitable HttpMessageConverter found for expected type

但是SeerealErrorHandler什么也没捕捉到。 (没有来自CustomErrorHandler的日志)

似乎spring default error handler管理对用户的返回响应。

如何在错误通道中捕获这些错误(来自消息转换器)?

  • 问题是,没有捕获消息转换器的异常,而捕获了SendChannel和ReplyChannel之间发生的其他异常。如何从消息转换器中捕获异常?

1 个答案:

答案 0 :(得分:0)

转换错误在过程中发生得太早;错误通道仅获取网关下游发生的错误。

您可以使用servlet过滤器执行某些操作。