java - 在运行时动态输入类文字作为方法参数

标签 java json jackson

我有一个使用外部库(Jackson)的应用程序,并且我需要的方法需要一个类文字作为参数。因此,如果我希望将 JSON 字符串解析为 User 对象:

ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(new File("user.json"), User.class);

现在,我希望动态使用此方法(即使用同一行代码解析不同的 JSON 字符串)。例如:

String json1 = "{"type":"jacket",...}";
String json2 = "{"type":"sweater",...}";

Object object = mapper.readValue(json1/json2, ???); 
//returns a Jacket object OR Sweater object based on the "type" key
//i.e. use Jacket.class as the 2nd argument if "type" is "jacket"
//OR Sweater.class if "type" is "sweater"

//After getting the deserialized object,
//if object is Jacket, cast as a Jacket
//if object is Sweater, cast as a Sweater

当然,所涉及的 JSON 字符串可以用于任何类,因此我不能简单地硬编码 if-else 循环。我研究过自定义序列化器,但坦率地说,我对它所讨论的内容感到非常困惑,并且希望获得一些帮助来解决这个问题。

总之,我需要某种方法来首先从字符串定义类文字,然后将生成的对象转换为特定的类(但我的重点是让 readValue 动态工作)。

最佳答案

看起来您需要 JSON 类型变量和 Java 类类型之间的映射。

一般结果应该是这样的 map :

Map<String, Class<? extends YourSupertype>> map = new HashMap<>();
map.put("sweater", Sweater.class);
map.put("jacket", Jacket.class);

只需将可能的服装类型存储在文件中的某个位置,然后执行以下操作:

String clothingType = nextEntryFromFile();
String className = constructClassNameFromClothingType(clothingType);
map.put(clothingType, Class.forName(className));

关于java - 在运行时动态输入类文字作为方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11645841/

相关文章:

java - 当缓存内存已满时,在将新实体添加到缓存之前,哪个现有实体将被 hibernate 从缓存中逐出?

java - 如何使用对象字段本身给定的格式解析输入对象日期字段

java - Jackson:在@JsonCreator 设置后写入最终字段?

java - Android 屏幕上的维恩图(图像/标签/形状),其区域可点击

java - 英雄萨克斯错误

java - 使用 Jackson 将 JSON 反序列化为 ArrayList<POJO>

json - 使用@JsonFormat 时的错误时间(+1 小时)

javascript - 如何根据json文件生成热图

javascript - 无法通过ajax将javascript对象传递给php

java - 使用 Jackson 将 json 扁平化为 map