【问题标题】:How can I specify the second parameter in ObjectMapper based on a variable in Java?如何根据 Java 中的变量指定 ObjectMapper 中的第二个参数?
【发布时间】:2021-04-13 10:46:34
【问题描述】:

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

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

【问题讨论】:

    标签: java spring-boot jackson spring-kafka


    【解决方案1】:

    您的地图将包含主题名称以及它们应映射到的类。 所有类都实现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"));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-02
      • 2017-11-16
      • 1970-01-01
      • 2019-08-05
      • 1970-01-01
      • 2022-10-04
      • 2020-10-21
      • 1970-01-01
      相关资源
      最近更新 更多