将 json 反序列化为可选列表不会获取数组元素
Deserializing json to optional list doesn't obtain array elements
我在将 JSON 数组反序列化为可选列表并使用吗啡将它们添加到 MongoDB 时遇到问题。不是将数组的实际元素添加到 Mongo,而是添加数组的大小。请参阅下面的代码...
BookWrapper Class
public class BookWrapper {
private List<Book> books;
public List<Book> getBooks() {
return books;
}
public void setBooks(List<Book> books) {
this.books = books;
}
}
图书Class
@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 已插入文档
no elements, only the size of the array!
在字段上使用 Optional
是对该类型的误用,不推荐使用。 Brian Goetz 本人曾推荐 against 它。当然,如果您使用 Morphia 来持久化这些实体,则根本不支持 Optional
字段,因此出现奇怪的行为也就不足为奇了。您的实体应该只有 List<String>
for authors
.
我在将 JSON 数组反序列化为可选列表并使用吗啡将它们添加到 MongoDB 时遇到问题。不是将数组的实际元素添加到 Mongo,而是添加数组的大小。请参阅下面的代码...
BookWrapper Class
public class BookWrapper {
private List<Book> books;
public List<Book> getBooks() {
return books;
}
public void setBooks(List<Book> books) {
this.books = books;
}
}
图书Class
@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 已插入文档 no elements, only the size of the array!
在字段上使用 Optional
是对该类型的误用,不推荐使用。 Brian Goetz 本人曾推荐 against 它。当然,如果您使用 Morphia 来持久化这些实体,则根本不支持 Optional
字段,因此出现奇怪的行为也就不足为奇了。您的实体应该只有 List<String>
for authors
.