当前位置: 首页 > 知识库问答 >
问题:

在application.properties文件中配置自定义Kafka使用者反序列化程序。[Spring靴]

宇文兴言
2023-03-14

我想使用 avro 消息并反序列化它们,而不使用融合模式注册表。我在本地有架构。因此,为此,我只关注消费者部分的 https://medium.com/@mailshine/apache-avro-quick-example-in-kafka-7b2909396c02。现在,我想在应用程序属性文件中配置此反序列化程序(Spring引导方式)。我尝试添加Spring.kafka.消费者.价值反序列化器=com.example.Avro去序列化器,但这会导致错误,说“找不到 com.example.Avro去序列化器的公共无参数构造函数”。有没有办法从应用程序属性配置中调用带有参数的构造函数。或者,我是否需要在代码中而不是属性中配置它?

提前致谢!!

共有1个答案

丌官利
2023-03-14

你可以使用属性来做到这一点,但你必须通过配置方法(使用无arg构造函数)来做到这一点 - 这是因为Kafka实例化了反序列化器,而不是Spring。

有关示例,请参阅组织.springframework.kafka.support.serializer.JsonDeserizer 源代码。

否则,您可以将解串器注入消费者工厂...

@Bean
MyDeserializer(DefaultKafkaConsumerFactory<String, Foo> factory) {
    MyDeserializer<Foo> deser = new MyDeserializer<>(...);
    factory.setValueDeserializer(deser);
    return deser;
}
 类似资料:
  • 我有一个Spring项目,我尝试添加一个自定义反序列化器来反序列化日期属性,具体取决于它们的格式。如果我将其用作Date属性的注释,则效果很好。但是,如果我将反序列化器添加到对象映射器中,当Jackson反序列化日期时,它不会调用。 我尝试这样应用我的自定义反序列化程序: 我不想每次都对Date属性应用注释,我想默认使用此反序列化器。我做错了什么?

  • 我在一个Kafka消息中使用了我自己的类,它有一堆字符串数据类型。 我想我需要编写自己的序列化器并将其提供给生产者属性?

  • 问题内容: 我有一堂课 我想将下面的JSON数据反序列化到上面的类/对象中 我的想法是在JSON中是一个对象,但我只想获取(在JSON中)在反序列化期间将像在类中那样传递。 如何使用Json.NET实现该目标? 我相信我可以使用CustomJsonConverter完成它。但是我很困惑。docs中的示例仅用于,但不适用。 问题答案: 我只是使用上面在问题中提到的方法解决了我的问题。在我完整的代码下

  • 我试图用Jackson库创建复杂类的对象。每个对象都有一个模式,反序列化器需要使用该模式来解释JSON。我的问题是如何向反序列化器提供模式? 反序列化程序扩展了类JSONDeserializer,该类具有无参数构造函数和必须重写的抽象方法反序列化(解析器、上下文)。我想改用另一种方法反序列化(解析器、上下文、值),其中值是部分构造的对象,其中包括模式。也就是说,反序列化方法可以调用value。sc

  • 我想反序列化表单中的类: 其中文本是加密的,反序列化应该在重建TestFieldEncryptedMessage实例之前取消对值的加密。 我采用的方法非常类似于:https://github.com/codesqueak/jackson-json-crypto 也就是说,我正在构建一个扩展SimpleModule的模块: 如您所见,设置了两个修饰符:EncryptedSerializerModif

  • 我基本上成功地使用EmbeddedKafka设置了一个测试,它生成并使用一条消息。下面是测试的工作版本: 除非在字段上添加assertequal,否则这是正常的,在JSON中,该字段是一个电子邮件地址列表,由在类中是一个字符串数组。因此,在类中,我有字段,该字段用注释,该字段指向沿着等。 我试图修改上面的代码,将更改为,然后在测试中发送JSON而不是实例,但我得到了一个异常: 因此,由于某种原因,