Десериализация json в необязательный список не приводит к получению элементов массива - PullRequest
0 голосов
/ 06 мая 2020

У меня проблемы с десериализацией JSON массивов в необязательные списки и добавлением их в MongoDB с помощью morphia. Вместо добавления фактических элементов массива в Mon go добавляется размер массива. См. Код ниже ...

Класс BookWrapper

public class BookWrapper {

    private List<Book> books;

    public List<Book> getBooks() {
        return books;
    }

    public void setBooks(List<Book> books) {
        this.books = books;
    }
}

Книжный класс

@Entity("Book")
public class Book {

    private String name;
    private Optional<List<String>> authors = Optional.empty();

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Optional<List<String>> getAuthors() {
        return authors;
    }

    public void setAuthors(Optional<List<String>> authors) {
        this.authors = authors;
    }

}

Загрузить Книжный метод

public void uploadBook() throws IOException {
        File file = new File("data/book.json");
        mapper.registerModule(new Jdk8Module());
        BookWrapper wrapper = mapper.readValue(file, BookWrapper.class);
        List<Book> books = wrapper.getBooks();
        for(Book book : books) {
            db.save(book);
        }
}

книга. json Файл

{
    "books" : [
        {
            "name": "Best Book Ever",
            "authors": ["John Smith", "Mike Apple"]
        },
        {
            "name": "Tale of Legends",
            "authors": ["Anne Lumo", "Andre John"]
        }
    ]
}

Пн go Вставленный документ без элементов, только размер массива!

1 Ответ

1 голос
/ 06 мая 2020

Использование Optional в полях является неправильным использованием типа и не рекомендуется. Сам Брайан Гетц рекомендовал против . Конечно, если вы используете Morphia для сохранения этих сущностей, поля Optional не поддерживаются вообще, поэтому неудивительно, что вы получаете странное поведение. У вашей организации должно быть просто List<String> вместо authors.

...