我正在尝试在复杂的JSON结构上应用Groovy对象模型。
我实现了对该JSON进行建模所需的所有POGO,但我只是意识到默认的Map构造函数不会自动实例化带有列表的对象(这是我所预期的行为)。
class Foo {
String fooKey
@Override
String toString() {
return "Foo{" +
"fooKey='" + fooKey + '\'' +
'}'
}
}
class Toto {
Foo foo
List<Foo> foos
@Override
String toString() {
return "Toto{" +
"foos=" + foos +
", foo=" + foo +
'}'
}
}
public static void main(String[] args) {
Toto toto = new Toto(["foo": ["fooKey": "fooVal"], "foos": [["fooKey": "fooVal"]]])
println toto
println toto.foo instanceof Foo
println toto.foos instanceof List<Foo>
println toto.foos.get(0) instanceof Foo
println ""
println "--------------"
println ""
Foo foo = new Foo()
println foo instanceof Foo
println foo
}
输出以下内容:
Toto{foos=[[fooKey:fooVal]], foo=Foo{fooKey='fooVal'}}
true
true
false <----- This is the problem
--------------
true
Foo{fooKey='null'}
是否可以实例化我的List<Foo>
而不会自己重写默认构造函数?
答案 0 :(得分:1)
感谢hsan和cfrick提到没有“本机”方式来处理此问题。
最好的解决方案是使用JSON解析库。我之所以选择Jackson,是因为它已经在Groovy执行上下文中的其他地方使用过,这使我可以重用依赖项。