You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Cloud AWS 3.x:移除SqsTemplate发送消息时MessageAttributes中的JavaType

解决Spring Cloud AWS 3.x SqsTemplate发送消息时移除JavaType属性的问题

问题分析

SqsTemplate默认使用MappingJackson2MessageConverter时,会自动添加JavaType消息属性标识消息的Java类型。这个属性会导致接收端反序列化时,优先匹配StringMessageConverter(因属性值为java.lang.String),无法正确转换为DummyRequest类型。

解决方案

1. 全局配置自定义MappingJackson2MessageConverter(推荐)

通过配置Bean关闭转换器自动添加类型信息的功能,所有通过SqsTemplate发送的消息都不会携带JavaType属性:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.converter.MappingJackson2MessageConverter;

@Configuration
public class SqsConfig {

    @Bean
    public MappingJackson2MessageConverter mappingJackson2MessageConverter() {
        MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
        // 关闭自动添加JavaType类型信息
        converter.setAddTypeInfo(false);
        return converter;
    }
}

2. 发送特定消息时手动移除JavaType属性

如果仅需针对部分消息处理,可在发送前构建Message对象并手动移除该属性:

import org.springframework.messaging.Message;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.cloud.aws.messaging.core.SqsTemplate;

// 构建消息
DummyRequest request = new DummyRequest();
Message<DummyRequest> message = MessageBuilder.withPayload(request)
        .build();

// 移除自动添加的JavaType属性
message.getHeaders().remove("JavaType");

// 发送消息
sqsTemplate.send("your-queue-name", message);

3. 手动控制消息属性,完全不添加JavaType

直接构建自定义消息属性集合,仅携带业务所需属性:

import software.amazon.awssdk.services.sqs.model.MessageAttributeValue;
import org.springframework.cloud.aws.messaging.core.SqsTemplate;
import java.util.HashMap;
import java.util.Map;

// 构建自定义消息属性
Map<String, MessageAttributeValue> attributes = new HashMap<>();
attributes.put("Content-type", MessageAttributeValue.builder()
        .dataType("String")
        .stringValue("application/json")
        .build());

// 发送消息,仅携带指定属性
sqsTemplate.send("your-queue-name", request, attributes);

验证

发送消息后检查MessageAttributes,确认不再包含JavaType属性,接收端即可通过MappingJackson2MessageConverter正常反序列化为DummyRequest类型。

内容的提问来源于stack exchange,提问作者hun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 12:34:54