将json反序列化为可选的列表,无法获得数组元素。

问题描述 投票:0回答:1

我在将JSON数组反序列化为可选列表并使用morphia将它们添加到MongoDB中时遇到了麻烦。我没有将数组的实际元素添加到Mongo中,而是添加了数组的大小。请看下面的代码...

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);
        }
}

book.json 文件

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

Mongo插入式文件没有元素,只有数组的大小!

java spring jackson optional morphia
1个回答
1
投票

使用 Optional 场上,是对该类型的误用,并不推荐。 Brian Goetz自己也曾推荐 与...对抗 它。 当然,如果你使用Morphia来持久化这些实体,那么就不可能支持 Optional 字段,所以你得到奇怪的行为也就不足为奇了。 你的实体应该只有 List<String> 对于 authors.

© www.soinside.com 2019 - 2024. All rights reserved.