如何根据 Java 中的变量指定 ObjectMapper 中的第二个参数?

How can I specify the second parameter in ObjectMapper based on a variable in Java?

我有一个用例,我从多个主题中消费并且基于主题我必须从字符串创建一个对象。我有大约 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);

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

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

public class TestEvent implements Event {
}

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

extends 关键字可用于将其限定为“任何 class 其中 extends/implements 事件

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