接口背后的对象的Java序列化

时间:2016-09-19 16:01:25

标签: java-ee serialization jackson

我有以下设置:

public interface I{ public String getIprop();}

class A implements I{ public String a = "a"; public String getIprop(){return "i";}

class B implements I{ public String b = "b"; public String getIprop(){return "i";}

List<I> myObjects = new List<I>(); myObjects.add(new A()); myObjects.add(new B());

myObjets应作为http响应传回。 (串行化) 使用Jackson 1.x,一切都很好:序列化的返回String有A和B两个对象,尽管我只序列化了它们的接口。第一个对象包含a成员和i成员。第二个Object包含b成员和i成员。

现在,使用jackson 2.x,序列化只包含我的对象的接口:两个对象都只包含i成员。

可以解释这种行为吗?我如何通过杰克逊2获得旧的行为?

1 个答案:

答案 0 :(得分:0)

我不知道它是如何在jackson 1.x中,但对于jackson 2.x你必须在mapper中添加类型解析器,类似于:

mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);

或在课堂上,如:

@JsonTypeInfo
(
         use = JsonTypeInfo.Id.CLASS,
         include = JsonTypeInfo.As.PROPERTY
)
public interface I{ public String getIprop();}