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

问题描述 投票:0回答:1

我有以下设置:

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 的旧行为?

jakarta-ee serialization jackson
1个回答
0
投票

我不知道 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();}
© www.soinside.com 2019 - 2024. All rights reserved.