首页 > 解决方案 > 如何根据 Java 中的变量指定 ObjectMapper 中的第二个参数?

问题描述

我有一个用例,我从多个主题中消费,并且基于主题我必须从字符串创建一个对象。我有大约 25 个主题导致 25 种对象。因此,我不想使用一堆 if-else,而是想使用一个键是主题名称的映射。所以,与其这样做,

if(topic.equals("testTopic") {

  Event event = mapper.readValue(strMessage, TestEvent.class);

}

我想做这个

Event event = mapper.readValue(strMessage, map.get(topic)); 

Event是所有类实现的接口,topic会存储topic名称。

这就是我创建 ObjectMapper 的方式 -

ObjectMapper mapper = new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

我怎样才能做到这一点?提前致谢

标签: javaspring-bootjacksonspring-kafka

解决方案


您的地图将包含主题名称以及它们应映射到的类。所有类都实现 Event.class

public class TestEvent implements Event {
}

 Map<String, Class<?extends Event>> mappings = new HashMap<>();
 mappings.put("testTopic", TestEvent.class);

extends 关键字可用于将其限定为“任何扩展/实现事件的类

 Event testEvent = mapper.readValue("messagePayloadJSON", mappings.get("testTopic"));

推荐阅读