对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

Spring AMQP 1.4 引入了 ,其中实际转换器是根据 在传入内容类型 Message 属性上。 这可由入站终结点使用。ContentTypeDelegatingMessageConverterSpring中文文档

从 Spring Integration 版本 4.3 开始,您也可以使用 on 出站端点,标头指定使用哪个转换器。ContentTypeDelegatingMessageConvertercontentTypeSpring中文文档

以下示例配置一个 ,默认转换器为 (用于处理 Java 序列化和纯文本),以及一个 JSON 转换器:ContentTypeDelegatingMessageConverterSimpleMessageConverterSpring中文文档

<amqp:outbound-channel-adapter id="withContentTypeConverter" channel="ctRequestChannel"
                               exchange-name="someExchange"
                               routing-key="someKey"
                               amqp-template="amqpTemplateContentTypeConverter" />

<int:channel id="ctRequestChannel"/>

<rabbit:template id="amqpTemplateContentTypeConverter"
        connection-factory="connectionFactory" message-converter="ctConverter" />

<bean id="ctConverter"
        class="o.s.amqp.support.converter.ContentTypeDelegatingMessageConverter">
    <property name="delegates">
        <map>
            <entry key="application/json">
                <bean class="o.s.amqp.support.converter.Jackson2JsonMessageConverter" />
            </entry>
        </map>
    </property>
</bean>

将标头设置为的消息发送到会导致选择 JSON 转换器。ctRequestChannelcontentTypeapplication/jsonSpring中文文档

这适用于出站通道适配器和网关。Spring中文文档

从 V5.0 开始,添加到出站邮件的标头永远不会被映射的标头覆盖(默认情况下)。 以前,只有当消息转换器是 a 时才会出现这种情况(在这种情况下,首先映射标头,以便可以选择正确的转换器)。 对于其他转换器,例如 ,映射的标头会覆盖转换器添加的任何标头。 当出站邮件具有一些剩余的标头(可能来自入站通道适配器)并且错误的出站被错误地覆盖时,这会导致问题。 解决方法是在将消息发送到出站终结点之前,使用标头筛选器删除标头。MessagePropertiesContentTypeDelegatingMessageConverterSimpleMessageConvertercontentTypecontentTypeSpring中文文档

但是,在某些情况下,需要先前的行为 - 例如,当包含 JSON 的有效负载时,该负载不知道内容并将消息属性设置为,但应用程序希望通过设置发送到出站终结点的消息的标头来覆盖该属性。 这完全是这样做的(默认情况下)。StringSimpleMessageConvertercontentTypetext/plainapplication/jsoncontentTypeObjectToJsonTransformerSpring中文文档

现在,在出站通道适配器和网关(以及 AMQP 支持的通道)上调用了一个属性。 设置此选项可恢复覆盖转换器添加的属性的行为。headersMappedLasttrueSpring中文文档

从版本 5.1.9 开始,当我们生成回复并希望覆盖转换器填充的标头时,会提供类似的功能。 有关更多信息,请参阅其 JavaDocs。replyHeadersMappedLastAmqpInboundGatewaySpring中文文档

从 V5.0 开始,添加到出站邮件的标头永远不会被映射的标头覆盖(默认情况下)。 以前,只有当消息转换器是 a 时才会出现这种情况(在这种情况下,首先映射标头,以便可以选择正确的转换器)。 对于其他转换器,例如 ,映射的标头会覆盖转换器添加的任何标头。 当出站邮件具有一些剩余的标头(可能来自入站通道适配器)并且错误的出站被错误地覆盖时,这会导致问题。 解决方法是在将消息发送到出站终结点之前,使用标头筛选器删除标头。MessagePropertiesContentTypeDelegatingMessageConverterSimpleMessageConvertercontentTypecontentTypeSpring中文文档

但是,在某些情况下,需要先前的行为 - 例如,当包含 JSON 的有效负载时,该负载不知道内容并将消息属性设置为,但应用程序希望通过设置发送到出站终结点的消息的标头来覆盖该属性。 这完全是这样做的(默认情况下)。StringSimpleMessageConvertercontentTypetext/plainapplication/jsoncontentTypeObjectToJsonTransformerSpring中文文档

现在,在出站通道适配器和网关(以及 AMQP 支持的通道)上调用了一个属性。 设置此选项可恢复覆盖转换器添加的属性的行为。headersMappedLasttrueSpring中文文档

从版本 5.1.9 开始,当我们生成回复并希望覆盖转换器填充的标头时,会提供类似的功能。 有关更多信息,请参阅其 JavaDocs。replyHeadersMappedLastAmqpInboundGatewaySpring中文文档