java - Spring Cloud 流反序列化不同的 pojo
问题描述
我正在使用 Kstream 来使用 kafka 消息并将其保存到我的数据库中。这些消息属于不同的 pojo,目前我正在使用对象映射器来创建对象,然后将它们保存在数据库中。我读过可以使用 Jsondeserialzerserde,但我不确定如何使用它映射到不同的 pojo。为每个 pojo 定制一个 serde 是没有意义的。请帮忙 。提前致谢。
这是我的代码:
public Consumer<KStream<String, String>> process() {
return input ->
inpu.foreach((key, value) -> {
ObjectMapper mapper = new ObjectMapper();
try {
if(value.contains("Teacher"))
{
Teacher teacher= mapper.readValue(value,Teacher.class);
teacherRepository.save(teacher);
}
else if(value.contains("Student"))
{
Student student= mapper.readValue(value,Student.class);
studentRepository.save(student)
}
else if(value.contains("Principal"))
{
Principal principal= mapper.readValue(value,Principal.class);
principalRepository.save(Principal);
}
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}); }
}
解决方案
Spring Cloud Stream 中的 Kafka Streams binder 不直接提供任何机制来执行您所要求的操作。您的消费者的类型签名表明您将其作为 使用String
,因此绑定器可以在您不明确提供任何 的情况下推断该信息Serde
。但是,如果您想String
使用 jackson 进一步将其转换为其他类型,您需要在业务逻辑中自行完成,因为您已经拥有它。如果您只有几个有限类型,我认为这样做没有问题。
推荐阅读
- python - Python:尝试从我的目录导入脚本时出现 ModuleNotFoundError。为我的伴侣工作,但不适合我
- matlab - Matlab 无法在神经网络上绘制验证和测试
- php - 如何替换文本文件中字符串的前半部分
- h2o - 有没有办法使用 H2O partial_plot 函数为多分类问题创建部分依赖图?
- android - 引用本地文件,如何接收 Resources.NotFoundException?
- c# - 如何在其他环境中删除 appsettings.json 中的节点?
- xml - 编辑 XML 中的特定内容
- python - 玩家和敌人的碰撞问题
- node.js - Discord 机器人无法在 Heroku 上说话
- docker - 码头工人的corda jolokia