这是我的班级层次结构:
香蕉课:
position
水果类:
ListView
汽车类:
@JsonTypeName("banana")
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "@type")
public class Banana<T, M> extends Fruit<T, M> {
摘要车辆类:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME)
@JsonSubTypes({ @JsonSubTypes.Type(value = Banana.class, name = "banana")})
public class Fruit<T, M> {
private boolean ok;
private T main;
所以我创建了新对象:
@JsonTypeName("car")
public class Car extends Vehicle {
Banana对象有&#34; @ type&#34;属性。
Car对象有&#34; type&#34;属性,如果我将汽车序列化为JSON,则打印出来:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({ @JsonSubTypes.Type(value = Car.class), @JsonSubTypes.Type(value = AnyOtherClass.class) })
public abstract class Vehicle<K> {
private Date date;
private Id<?> id;
但是,如果我将香蕉序列化为JSON,则会打印(仅#34;键入&#34;:&#34; car&#34;缺失,其他对象属性可用):
Banana<Car, String> ba = new Banana<Car, String>();
Car car = new Car("test");
ba.setMain(car);
如果我执行banana.getMain(),则打印出
{"type":"car"}
怎么可能?
我尝试了一个没有任何注释的简单对象(不是Car),并且在打印时工作正常
{}
有人提出任何想法吗?
答案 0 :(得分:2)
所以答案是将JacksonMapper的根类型指定为
jacksonMapper.writerWithType(new TypeReference<Banana<Car, String>>() {})
答案 1 :(得分:1)
您需要在此处提供更完整的使用示例。我怀疑这是由于类型参数化(即,尝试序列化泛型类型的实例)和Java类型擦除,但是如果没有看到您正在使用的代码,就不可能肯定地说。