如何在Jackson中实现基于json中指定的类类型从json到Java对象的转换。
示例Java类型:
public class Car{
public String make;
public String model;
}
public class Spoon {
public String material;
}
public class Ownership {
public List<Object> items;
public User owner;
}
示例Json:
{
"items": [
{
"@class": "com.example.Car",
"make": "Mercedes-Benz",
"model": "S500"
},
{
"@class": "com.example.Spoon",
"material": "silver"
}
],
"owner": {
"name": "John"
}
}
由于类的数量未知(用户可以添加任何类),因此无法使用注释@JsonSubTypes。
此外,json可能包含已知的强类型类,例如使用标准Jackson实现序列化的示例中的User用户。
我能找到的大多数例子,例如http://www.baeldung.com/jackson-inheritance都假设子类的数量是已知的,但在我的情况下却不知道,框架的用户会自己添加。
理想情况下,实现只会解析类型,让Jackson完成序列化的其余部分而不重复该代码。
答案 0 :(得分:2)
可以使用集合上的注释来解决:
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS,
include = JsonTypeInfo.As.PROPERTY,
property = "@class")
public List<Object> items;