如何在POGO中实例化POGO列表

时间:2019-06-17 08:08:18

标签: groovy

我正在尝试在复杂的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>而不会自己重写默认构造函数?

1 个答案:

答案 0 :(得分:1)

感谢hsan和cfrick提到没有“本机”方式来处理此问题。

最好的解决方案是使用JSON解析库。我之所以选择Jackson,是因为它已经在Groovy执行上下文中的其他地方使用过,这使我可以重用依赖项。