Java Spring Cloud stream反序列化不同的POJO

Java Spring Cloud stream反序列化不同的POJO,java,spring,apache-kafka,apache-kafka-streams,spring-cloud-stream,Java,Spring,Apache Kafka,Apache Kafka Streams,Spring Cloud Stream,我正在使用Kstream来使用kafka消息并将其保存到我的数据库中。这些消息属于不同的pojo,目前我正在使用对象映射器创建对象,然后将它们保存在DB中。我已经读到可以使用JSONDESerializerSerde,但我不确定如何使用它映射到不同的pojo。为每个pojo定制serde没有意义。请帮忙。提前谢谢 这是我的密码: public Consumer<KStream<String, String>> process() { return

我正在使用Kstream来使用kafka消息并将其保存到我的数据库中。这些消息属于不同的pojo,目前我正在使用对象映射器创建对象,然后将它们保存在DB中。我已经读到可以使用JSONDESerializerSerde,但我不确定如何使用它映射到不同的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();
                    }

                });    }

}
公共消费者流程(){
返回输入->
输入foreach((键,值)->{
ObjectMapper mapper=新的ObjectMapper();
试一试{
if(value.contains(“教师”))
{
Teacher-Teacher=mapper.readValue(value,Teacher.class);
teacherRepository.save(教师);
}
else if(value.contains(“学生”))
{
Student=mapper.readValue(值,Student.class);
studentRepository.save(学生)
}
else if(value.contains(“主体”))
{
Principal=mapper.readValue(值,Principal.class);
principalRepository.save(主体);
}
}捕获(JsonProcessingException e){
e、 printStackTrace();
}
});    }
}

Spring Cloud Stream中的Kafka Streams活页夹不直接提供任何机制来实现您的要求。您的消费者类型签名表示您将其作为
字符串使用,因此活页夹可以推断出该信息,而无需您明确提供任何
Serde
。但是,如果您想使用jackson进一步将
字符串
转换为其他类型,您需要在业务逻辑中自己完成,因为您已经有了它。如果您只有几个有限类型,我认为这样做没有问题。

明白。谢谢您的解释。