Как создать список POGO в POGO - PullRequest
1 голос
/ 17 июня 2019

Я пытаюсь применить объектную модель Groovy к сложной структуре JSON.

Я реализовал все POGO, необходимые для моделирования этого JSON, но я только что понял, что конструктор Map по умолчанию не автоматически создает экземпляры Objects в списках (и это предполагаемое поведение, я думаю).

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 Ответ

1 голос
/ 17 июня 2019

Спасибо hsan и cfrick за то, что они упомянули, что нет "нативного" способа справиться с этим.

Лучшее решение - использовать библиотеку синтаксического анализа JSON.Я выбрал Джексона, потому что он уже используется где-то еще в моем контексте выполнения Groovy, что позволяет мне повторно использовать зависимость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...