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

Spring Boot 2.4.7 Kafka消费出现MessageConversionException异常咨询

异常原因
  1. Kafka消息内置类型标识冲突:上游生产者发送该Topic消息时,序列化工具会自动将发送类的全限定名写入消息Header的__TypeId__字段,当前消费的消息__TypeId__值为com.base.employee.dtos.employeeexecution.EmployeeExecutionEBO,是上游服务定义的类,你本地项目不存在该类。
  2. 反序列化配置优先级问题:Spring Kafka的JsonMessageConverter反序列化时,会优先读取消息Header内的__TypeId__值匹配类,优先级高于你手动指定的PersonEBO反序列化目标类,导致触发类找不到异常。
  3. 自定义配置未生效:你自定义的Kafka监听容器工厂Bean名为kafkaConsumer,但@KafkaListener注解中指定的containerFactory值为kafkaListenerContainerFactory(Spring默认容器工厂名),你写的自定义反序列化、异常处理配置完全没有生效。
解决方案
  • 修正容器工厂引用:将@KafkaListener注解的containerFactory属性值改为你自定义的Bean名kafkaConsumer,确保你的自定义配置生效。
  • 移除多余的消息转换器配置:ConcurrentKafkaListenerContainerFactory中factory.setMessageConverter(new JsonMessageConverter())这行代码会覆盖你配置的自定义反序列化规则,直接删除该行即可。你在JsonDeserializer构造时已经指定了PersonEBO.class且关闭了类型头读取(第二个参数为false),配置生效后就会直接用你指定的类反序列化。
  • (可选)配置类型映射:如果需要保留类型头校验,可以在消费者配置中添加类型映射规则,将上游的类路径映射到本地类:
    // 在consumerConfigs()方法中添加如下配置
    props.put(JsonDeserializer.TYPE_MAPPINGS, "com.base.employee.dtos.employeeexecution.EmployeeExecutionEBO:com.base.person.dtos.personexecution.PersonEBO");
    
    也可以直接在@KafkaListener的properties属性中添加配置:
    "spring.json.type.mapping=com.base.employee.dtos.employeeexecution.EmployeeExecutionEBO:com.base.person.dtos.personexecution.PersonEBO"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:09:02