MarshallingException:无法解组结果参考

Posted

技术标签:

【中文标题】MarshallingException:无法解组结果参考【英文标题】:MarshallingException: Unable to unmarshall result Reference 【发布时间】:2015-09-28 16:34:58 【问题描述】:

我正在使用 play 2.4 并想在模型“用户”中设置一个参考对象“文档”。 如果我遍历迭代器,我会收到以下错误:因此,如果我调用路由 /users,通常我应该得到一个包含所有用户对象和嵌入文档的 Json 列表。

[MarshallingException: Unmarshall result to class 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()

【问题讨论】:

【参考方案1】:

我发现了问题。忘记在booth模型中实现默认构造函数,实现后程序运行正常。

【讨论】:

以上是关于MarshallingException:无法解组结果参考的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Jersey 客户端解组 JSON 对象数组

无法解组数组

json 错误,无法将对象解组为 Go 值

无法使用 spray-json 解组 json HttpEntity

Android 和 AWS Cognito - 无法使用 proguard 解组错误响应

Grails 无法将 JSON 中的日期/时间解组回 joda DateTime