java - 如何根据 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);
我怎样才能做到这一点?提前致谢
解决方案
您的地图将包含主题名称以及它们应映射到的类。所有类都实现 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"));
推荐阅读
- postgresql - 使用毫秒和 +- 查询带有 timestamptz 的表
时区 - javascript - 在 AWS Lambda 中对 Woocommerce API 调用使用 async/await
- python - Sphinx 生成文档中的类路径
- python - 不能用 range() 也不能用 len() 遍历元素
- python - 创建 matplotlib 图时,第一行 fig,ax=plt.subplots() 的相关性是什么?
- c# - 将下拉列表过滤添加到使用存储过程的网格视图
- c# - 如何使用脚本将垂直滚动添加到画布?
- javascript - 从 nodejs 应用程序获取一个值到另一个 nodejs 应用程序的客户端
- unity3d - FSM AI 控制器包中的 fsm 编辑器中缺少“+”号
- php - 基于变量值的颜色表行