使用jackson反序列化List <Interface>

var*_*unl 14 java serialization json jackson

我想将json反序列化为类Foo:

class Foo {
   List<IBar> bars;
}

interface IBar {
   ...
}

class Bar implements IBar {
   ...
}
Run Code Online (Sandbox Code Playgroud)

IBar有两个实现,但是当反序列化时我总是想要使用第一个实现.(理想情况下,这应该使问题更容易,因为不需要运行时类型检查)

我相信我可以编写自定义反序列化器,但觉得必须有更容易的东西.

我找到了这个注释,当没有列表时它可以很好地工作.

@JsonDeserialize(as=Bar.class)
IBar bar;

List<IBar> bars; // Don't know how to use the annotation here.
Run Code Online (Sandbox Code Playgroud)

var*_*unl 28

http://jackson.codehaus.org/1.2.1/javadoc/org/codehaus/jackson/map/annotate/JsonDeserialize.html#contentAs()

@JsonDeserialize(contentAs=Bar.class)
List<IBar> bars;
Run Code Online (Sandbox Code Playgroud)

  • 如果我有多个IBar实现,那么解决方案是什么?我有一个具有IBar对象列表的对象。它可以是动态的Bar1.class或Bar2.class。有什么办法可以解决吗? (2认同)