如何在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可能包含已知的强类型类,例如示例中的对象User(使用标准Jackson实现序列化)。
我可以找到的大多数示例,例如http://www.baeldung.com/jackson-inheritance都假定知道子类的数量,但在我不知道的情况下,框架的用户将添加自己的子类。
理想情况下,实现将只解析类型,并让Jackson进行其余的序列化操作,而无需重复该代码。
可以使用集合上的注释来解决:
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS,
include = JsonTypeInfo.As.PROPERTY,
property = "@class")
public List<Object> items;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句