我有以下设置:
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 成员。第二个对象包含 b 成员和 i 成员。
现在,在 jackson 2.x 中,序列化仅包含我的对象的接口:两个对象都只包含 i-member。
s/o 可以解释这种行为吗?我怎样才能获得 Jackson 2 的旧行为?
我不知道 Jackson 1.x 中的情况如何,但是对于 Jackson 2.x,您必须在映射器中添加类型解析器,例如:
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
或者在课堂上,比如:
@JsonTypeInfo
(
use = JsonTypeInfo.Id.CLASS,
include = JsonTypeInfo.As.PROPERTY
)
public interface I{ public String getIprop();}