我正在使用play 2.4并且想在模型“user”中设置引用对象“document”。 如果我迭代迭代器,我会收到以下错误:所以如果我调用路由/用户,通常我应该得到一个包含所有用户对象和嵌入文档的Json列表。
[MarshallingException:无法将结果解组为类models.User from content {“_ id”:{“$ oid”:“560969b4d4c6209ff2a1a973”},“name”:“Alexander Buder”,“documents”:[{“name “:”Sample.pdf“},{”name“:”Test.pdf“}]}]
模型用户
package models;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.jongo.MongoCollection;
import org.bson.types.ObjectId;
import uk.co.panaxiom.playjongo.PlayJongo;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* Created by abuder on 28.09.15.
*/
public class User {
public static MongoCollection users() {
return PlayJongo.getCollection("users");
}
@JsonProperty("_id")
private ObjectId id;
private String name;
private List<Document> documents = new ArrayList<Document>();
public User save() {
users().save(this);
return this;
}
public ObjectId getId() {
return id;
}
public void setId(ObjectId id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Document> getDocuments() {
return documents;
}
public void setDocuments(List<Document> documents) {
this.documents = documents;
}
public void remove() {
users().remove(this.id);
}
public static User findByName(String name) {
return users().findOne("{name: #}", name).as(User.class);
}
public static List<User> findAll(){
List<User> userList = new ArrayList<User>();
Iterator<User> iterator = users().find().as(User.class).iterator();
while (iterator.hasNext()){
userList.add(iterator.next());
}
return userList;
}
}
模型文件
package models;
/**
* Created by abuder on 28.09.15.
*/
public class Document {
private String name;
public Document(String name){
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
控制器
package controllers;
import models.Document;
import models.User;
import play.*;
import play.libs.Json;
import play.mvc.*;
import views.html.*;
import java.util.List;
public class Application extends Controller {
public Result index() {
Document doc1 = new Document("Sample.pdf");
Document doc2 = new Document("Test.pdf");
User user = new User();
user.setName("Alexander Buder");
user.getDocuments().add(doc1);
user.getDocuments().add(doc2);
user.save();
return ok(Json.toJson(user));
}
public Result usersJson(){
List<User> userList = User.findAll();
return ok(Json.toJson(userList));
}
}
路线
GET / controllers.Application.index()
GET /users controllers.Application.usersJson()
答案 0 :(得分:0)
我发现了问题。我忘了在booth模型中实现默认构造函数,在实现之后,程序运行正常。