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 ...
随机推荐
- flutter 使用阿里iconfont图标库
1. 打开Iconnfont,选择自己想要的图标添加到购物车! 2,在右上角点开购物车选择下载代码. 3. 解压下载的代码压缩包,我们可以看到一个iconfont.ttf 4. 在项目根目录下创建一个 ...
- Apache HTTPD 多后缀解析漏洞复现(Kali)
通过vulhub靶场进行复现操作 1.首先搭建靶场环境(采用Kali) cd /vulhub/httpd/apache_parsing_vulnerability //进入对应漏洞目录,具体 ...
- Go语言中密码加密校验
使用go自带的库bcrypt bcrypt是不可逆的加密算法,无法通过解密密文得到明文. bcrypt和其他对称或非对称加密方式不同的是,不是直接解密得到明文,也不是二次加密比较密文,而是把明文和存储 ...
- Importing Your Own Python Module or Python File into Colab
Source from : https://medium.com/analytics-vidhya/importing-your-own-python-module-or-python-file-in ...
- k8s集群部署kafka
一.部署步骤 1.部署NFS并挂载共享目录 2.部署zookeeper集群 3.部署kafka集群 4.测试kafka 二.部署NFS并挂载共享目录 注:使用云产品的NAS存储可跳过此步骤 1.服务端 ...
- Alibaba Cloud Linux 3.2104 64位安装nginx-1.16.1
1 下载nginx 从nginx官网 http://nginx.org/ 下载新的稳定版本nginx 并上传到linux服务器 2 安装nginx 所需要的扩展 yum -y install ...
- 12.20linux学习第十九天
今天老刘开始讲第17章 使用iSCSI服务部署网络存储.第18章 使用MariaDB数据库管理系统和第19章 使用PXE+Kickstart无人值守安装服务,内容有点多. 7.1 iSCSI技术介绍 ...
- Mongodb+Stadio 3
一.安装Mongodb https://www.mongodb.com/download-center/community 请下载对应的系统 安装过程请不要选择 当所有的步骤值完成的时候,找到你的安 ...
- LeetCode 之 111. 二叉树的最小深度
原题链接 思路: 递归计算每个子树的深度,返回左右子树中深度小的值: 由于题目中要求的是到最近叶子节点的深度,所以需要判断 左右子树为空的情况: python/python3: class Solut ...
- STL二分查找算法
二分法检索又称折半检索,二分法检索的基本思想是设字典中的元素从小到大有序地存放在数组(array)中,首先将给定值key与字典中间位置上元素的关键码(key)比较,如果相等,则检索成功:否则,若key ...