Kafka + SpringData + (Avro & String) 【Can't convert value of class java.lang.String】问题解决
【1】需求:Kafka 使用 Avero 反序列化时,同时需要对 String 类型的 JSON数据进行反序列化。AvroConfig的配置信息如下:
1 /**
2 * @author zzx
3 * @creat 2020-03-11-20:23
4 */
5 @Configuration
6 @EnableKafka
7 public class AvroConfig {
8 //生产者配置 略。。。。 主要说消费者问题
9 //消费者配置 avro 反序列化如下 主要是注入 Bean 的名称不同
10 @Bean
11 public Map<String, Object> consumerConfigs() {
12 Map<String, Object> props = new HashMap<>();
13 props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
14 props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
15 //主要区别
16 props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, AvroDeserializer.class);
17 props.put(ConsumerConfig.GROUP_ID_CONFIG, "avro");
18 props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,"latest");
19 props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG,"true");
20 props.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG,"1000");
21 return props;
22 }
23
24 @Bean
25 public ConsumerFactory<String, LatData> consumerFactory() {
26 return new DefaultKafkaConsumerFactory<>(consumerConfigs(), new StringDeserializer(),
27 new AvroDeserializer<>(LatData.class));
28 }
29
30 @Bean
31 public ConcurrentKafkaListenerContainerFactory<String, LatData> kafkaListenerContainerFactory() {
32 ConcurrentKafkaListenerContainerFactory<String, LatData> factory =
33 new ConcurrentKafkaListenerContainerFactory<>();
34 factory.setConsumerFactory(consumerFactory());
35 return factory;
36 }
37
38 //消费者配置 String 反序列化如下
39 @Bean
40 public Map<String, Object> stringConsumerConfigs() {
41 Map<String, Object> props = new HashMap<>();
42 props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
43 props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
44 //主要区别
45 props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
46 props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,"latest");
47 props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG,"true");
48 props.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG,"1000");
49 return props;
50 }
51
52 @Bean
53 public DefaultKafkaConsumerFactory stringConsumerFactory() {
54 return new DefaultKafkaConsumerFactory<>(stringConsumerConfigs(), new StringDeserializer(),
55 new StringDeserializer());
56 }
57
58 @Bean
59 public ConcurrentKafkaListenerContainerFactory<String, Object> stringKafkaListenerContainerFactory() {
60 ConcurrentKafkaListenerContainerFactory<String, Object> factory =
61 new ConcurrentKafkaListenerContainerFactory<>();
62 factory.setConsumerFactory(stringConsumerFactory());
63 return factory;
64 }
65
66 }
【2】消费者监听:当直接使用 @KafkaListener(topics = {"xx"})时,出现反序列化错误问题。
@KafkaListener(topics = {LOADING_TOPIC_NAME})
public void revice(String data) throws Exception {
【3】问题: ERROR c.y.c.exception.BDExceptionHandler - Can't convert value of class java.lang.String to class com.yunda.common.utils.avro.AvroSerializer specified in value.serializer
org.apache.kafka.common.errors.SerializationException: Can't convert value of class java.lang.String to class com.yunda.common.utils.avro.AvroSerializer specified in value.serializer
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.avro.specific.SpecificRecordBase
ERROR c.y.c.exception.BDExceptionHandler - Can't convert value of class java.lang.String to class com.yunda.common.utils.avro.AvroSerializer specified in value.serializer
org.apache.kafka.common.errors.SerializationException: Can't convert value of class java.lang.String to class com.yunda.common.utils.avro.AvroSerializer specified in value.serializer
Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.avro.specific.SpecificRecordBase
【4】问题解决:添加具体需要使用的容器 containerFactory 问题迎刃而解
1 @KafkaListener(topics = {ENTRY_TOPIC_NAME},containerFactory="stringkafkaListenerContainerFactory")
2 public void revice(String data) throws Exception {
Kafka + SpringData + (Avro & String) 【Can't convert value of class java.lang.String】问题解决的更多相关文章
- Cannot convert value of type [java.lang.String] to required type [java.util.Date] for property 'xxx': no matching editors or conversion strategy found
今天在完成项目的时候遇到了下面的异常信息: 04-Aug-2014 15:49:27.894 SEVERE [http-apr-8080-exec-5] org.apache.catalina.cor ...
- 解决spring mvc 上传报错,Field [] isn't an enum value,Failed to convert value of type 'java.lang.String[]' to required type '
没有选择附件,但是点击上传按钮的时候会报错. 之前不选择文件,直接上传空文件是可以的,后来不知道改了什么就不行了. 错误信息: -- :: [http--] TRACE org.springframe ...
- Failed to convert value of type 'java.lang.String' to required type 'java.time.LocalDate';
springboot jdbc查询使用LocalDate报:Failed to convert value of type 'java.lang.String' to required type 'j ...
- Cannot convert value of type [java.lang.String] to required type [javax.sql.DataSource] for property 'dataSource': no matching editors or conversion strategy found
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFa ...
- SpringBoot 项目启动 Failed to convert value of type 'java.lang.String' to required type 'cn.com.goldenwater.dcproj.dao.TacPageOfficePblmListDao';
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'tac ...
- 完美解决报错Failed to convert value of type 'java.lang.String' to required type 'java.util.Date'
Failed to convert value of type 'java.lang.String' to required type 'java.util.Date' 首先这个错误的意思是 前台页面 ...
- spring mvc出现 Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'endtime'
在使用spring mvc中,绑定页面传递时间字符串数据给Date类型是出错: Failed to convert property value of type [java.lang.String] ...
- Failed to convert from type [java.lang.String] to type [java.util.Date] for value '2020-02-06'; nested exception is java.lang.IllegalArgumentException]解决
今天做springbook项目前端输入日期传到数据库保存报了一下错误 Whitelabel Error Page This application has no explicit mapping fo ...
- 【Java面试题】53 能不能自己写个类,也叫java.lang.String?
可以,但是即使你写了这个类,也没有用. 这个问题涉及到加载器的委托机制,在类加载器的结构图(在下面)中,BootStrap是顶层父类,ExtClassLoader是BootStrap类的子类,ExtC ...
- mybatis之org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'time' in 'class java.lang.String'
mybatis接口 List<String> getUsedCate(String time); 配置文件 <select id="getUsedCate" pa ...
随机推荐
- 基于rabbitmq之MQTT协议的智能家居
智能家居项目 智能可燃气体报警器 产品是一款可燃气体报警器,如果家中燃气泄露浓度到达一定阈值,报警器检测到并上传气体浓度值给后台,后台以电话.短信.微信等方式,提醒用户家中可能有气体泄漏. 用户还可能 ...
- Dos基本命令及批处理
如何操作DOS命令: 开始----运行----cmd----回车: win+R------运行----cmd----回车: 基本命令: 1.命令:color f0 color ? 寻求帮助 改变背景 ...
- MyBatis Plus 设置ID的自增 /非自增时遇到的问题
非自增时 自己设置ID 其他可参考------>主键策略的几种类型 https://blog.csdn.net/hxyascx/article/details/105401767
- Cubemx 生成工程代码失败的原因
折腾了好久(躺)翻了很多解答试了试终于捣鼓正常了,就在这里汇总一下看到过的问题 1.文件名.工程名或者工程文件路径/库路径上有中文名 2.Cubemx的版本过高 3.java环境的版本不适配 4.可能 ...
- #Python #OpenCV 使用Python为你的圣诞节增添更多乐趣
目录 1.前言 2.目标与效果展示 3.下载OpenCV图形识别库 4.下载python支持的v2模块 5.图片素材 6.代码 1.前言 编辑 Merry Christmas!今天是2022 ...
- QPushButton与Enter相链接
ui->pushButton_login->setFocus(); // 设置默认焦点 ui->pushButton_login->setShortcut(QKeySequen ...
- 排查占用cpu最高线程
- Python+Django(2)——创建应用程序
新打开一个终端窗口,切换到manage.py所在的目录 激活虚拟环境:ll_env\Scripts\activate 命令startapp appname 让Django建立创建应用程序所需的基础设施 ...
- gulp技术:自动化构建工具
作用:压缩css.js.img,合并文件,改名字,编译sass,拷贝 使用步骤: 1.安装node环境,下一步,下一步,安装C盘: 2.在你的根目录下,在地址栏输入cmd回车: 3.检测node和np ...
- Qt编译问题之FTH (7156) Fault tolerant heap shim applied to current process
有时候Qt编译会出现FTH: (7156): *** Fault tolerant heap shim applied to current process. This is usually due ...