【问题标题】:How to I programaticaly set JsonDeserializer TypeValue method in Spring Kafka如何在 Spring Kafka 中以编程方式设置 JsonDeserializer 类型值方法
【发布时间】:2020-08-06 01:58:12
【问题描述】:

所以我无法仅使用 yaml 为 JsonSerializer 配置 JavaType 方法。尚不确定原因,但同时我如何以编程方式设置?

我在文档中看到了它的代码,但是这段代码到底需要在哪里运行?

Spring Kafka: JsonDeserializer doesn't pick up TRUSTED_PACKAGE config

这是我到目前为止所尝试的。 Kafka Spring Deserialzer returnType static method never called

PS 我在 Spring Boot 2.1.8 上,所以现在不能轻易地用新的方式使用属性。

【问题讨论】:

  • 可以分享一下你试过的示例代码吗?
  • 好的,我更新了@SauriBabu,并附上了我原来问题的链接。
  • 我尝试使用 yaml 来配置它,但它不会触发。现在不确定spring-boot和spring-kafka之间兼容的版本。我已经尝试过 2.3.2 boot 和 2.5.0 来让它工作,但它似乎不起作用。
  • 我已经看到了以编程方式设置它的代码,但它的 sn-p 总是永远看不到这段代码的确切运行位置
  • 换句话说,我到底在哪里运行以下命令? JsonDeserializer deser = new JsonDeserializer() .trustedPackages("*") .typeFunction(MyUtils::thingOneOrThingTwo);

标签: java spring-boot apache-kafka spring-kafka


【解决方案1】:

要在旧的 Boot 版本中获得此功能,您需要将代码从 2.5 JsonDeserializer 复制到自定义解串器 - typeFunction 是在 2.5 中添加的。

以编程方式创建反序列化器时,必须直接将其添加到消费者工厂。见the documentation

对于更复杂或特定的情况,KafkaConsumer(以及因此,KafkaProducer)提供重载的构造函数来分别接受键和值的序列化器和反序列化器实例。

当您使用此 API 时,DefaultKafkaProducerFactory 和 DefaultKafkaConsumerFactory 还提供属性(通过构造函数或 setter 方法)将自定义 Serializer 和 Deserializer 实例注入目标生产者或消费者。此外,您可以通过构造函数传入 Supplier 或 Supplier 实例 - 这些 Supplier 在创建每个 Producer 或 Consumer 时被调用。

创建一个 DefaultKafkaConsumerFactory @Bean(覆盖 Boot 的默认值)。

【讨论】:

    猜你喜欢
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 2020-11-10
    相关资源
    最近更新 更多