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

通过RabbitMQ Web发JSON时Spring RabbitListener报LinkedHashMap错误如何解决

问题根因

Spring AMQP默认使用SimpleMessageConverter处理消息,当你通过RabbitMQ Web端发送JSON格式的邮件消息时,如果没有配置专门的JSON消息转换器,框架会默认将JSON内容反序列化为java.util.LinkedHashMap类型,和你@RabbitListener监听方法定义的自定义邮件实体参数类型不匹配,就会抛出该异常。

解决方案
  • 方案1:配置全局JSON消息转换器
    直接在Spring配置类中注册Jackson2JsonMessageConverterBean,框架会自动用该转换器将JSON消息直接反序列化为监听方法参数对应的实体类型,无需额外手动转换:

    import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
    import org.springframework.amqp.support.converter.MessageConverter;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    @Configuration
    public class RabbitMqConfig {
        @Bean
        public MessageConverter jsonMessageConverter() {
            return new Jackson2JsonMessageConverter();
        }
    }
    
  • 方案2:调整监听方法参数手动转换
    若不想修改全局配置,可以直接将监听方法的入参类型改为LinkedHashMap,再手动转为自定义邮件实体类:

    import com.fasterxml.jackson.databind.ObjectMapper;
    import org.springframework.amqp.rabbit.annotation.RabbitListener;
    import org.springframework.stereotype.Component;
    import javax.annotation.Resource;
    import java.util.LinkedHashMap;
    
    @Component
    public class MailMessageListener {
        @Resource
        private ObjectMapper objectMapper;
    
        @RabbitListener(queues = "你的实际邮件队列名称")
        public void handleMailMessage(LinkedHashMap<String, Object> messageMap) {
            // 手动转换为自定义的MailDTO实体类
            MailDTO mailDTO = objectMapper.convertValue(messageMap, MailDTO.class);
            // 后续处理邮件发送的业务逻辑
        }
    }
    
  • 方案3:RabbitMQ Web端发送时补充消息头
    在Web管理界面发送消息时,在properties配置区域新增content_type属性,值设置为application/json,配合方案1的全局JSON转换器使用,适配效果更稳定。

注意事项
  • 自定义的邮件实体类需要保留无参构造方法,否则Jackson反序列化会报错
  • 如果实体类包含特殊格式字段(如日期、枚举),可通过@JsonFormat、@JsonEnum等Jackson注解做序列化适配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:36:04