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

如何在Kafka消费者中配置JsonDeserializer及解决启动报错

问题解决思路与方法

问题1:com.fasterxml.jackson.databind.JavaType 类缺失

原因

Spring Kafka的JsonDeserializer依赖Jackson Databind核心库,但当前依赖仅引入了spring-boot-starter,未包含完整的Jackson相关组件,导致类缺失。

解决方法

在pom.xml中添加Jackson Databind依赖:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>

或者直接引入spring-boot-starter-web(自动包含完整的Jackson依赖):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

问题2:com.example.Invoice 类找不到

可能原因及对应解决方法

  1. 消费者项目无Invoice类

    • 若生产者与消费者为同一项目:检查com.example包下是否存在Invoice实体类,确认类名拼写、大小写完全正确。
    • 若为不同项目:将Invoice类抽离到公共Jar模块,让生产者和消费者同时依赖该模块,确保两边类的全限定名完全一致。
  2. 配置中类路径错误

    • 核对消费者配置spring.json.value.default.type=com.example.Invoice,确认包名、类名无拼写错误(比如是否写成com.example.invoice小写类名,或类名实际为InvoiceDto等)。
  3. 消息类型与默认配置不匹配

    • 生产者发送的是Object类型,实际可能不是Invoice对象。可修改消费者代码,直接在监听方法中指定类型:
      @Override
      @KafkaListener(topics = "user" , groupId = "users")
      public void consume(@Payload Invoice message) {
          logger.info(String.format("Message recieved -> %s", message));
      }
      
    • 或在生产者配置中开启类型头,让消费者自动识别类型:
      spring.kafka.producer.properties[spring.json.add.type.headers]=true
      
      开启后可删除消费者配置中的spring.json.value.default.type,避免硬编码类型。
  4. 类加载路径问题

    • 确保Invoice类放在消费者项目的src/main/java目录下(而非src/test/java),保证编译后能被类加载器扫描到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 21:45:36