Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Json中:“a”到底是什么;“直接自我参照”;_Java_Json_Google App Engine_Restlet_Objectify - Fatal编程技术网

Java 在Json中:“a”到底是什么;“直接自我参照”;

Java 在Json中:“a”到底是什么;“直接自我参照”;,java,json,google-app-engine,restlet,objectify,Java,Json,Google App Engine,Restlet,Objectify,这个问题可能看起来很愚蠢,但对我来说,循环引用是例如对象a引用对象B,对象B引用对象a 我正在与一个android应用程序一起工作,该应用程序使用objectify DB与GAE服务器通信 我的模型非常简单,但我得到一个错误: org.codehaus.jackson.map.JsonMappingException: Direct self-reference leading to cycle (through reference chain: java.util.ArrayList[0]-&

这个问题可能看起来很愚蠢,但对我来说,循环引用是例如对象a引用对象B,对象B引用对象a

我正在与一个android应用程序一起工作,该应用程序使用objectify DB与GAE服务器通信

我的模型非常简单,但我得到一个错误:

org.codehaus.jackson.map.JsonMappingException: Direct self-reference leading to cycle (through reference chain: java.util.ArrayList[0]->com.my.model.MyMessage["senderKey"]->com.googlecode.objectify.Key["root"])
这是我的模型:MyMessage指的是MyUser(MyUser不指MyMessage

代码如下:

public class MyMessage implements Serializable {
private static final long serialVersionUID = -1075184303389185795L;

@Id
private Long id;

@Unindexed
private String sendMessage;

@Unindexed
private String answerMessage;

private MessageStatus status = MessageStatus.FREE;

@Parent
Key<MyUser> senderKey;

Key<MyUser> answererKey;

@SuppressWarnings("unused")
private MyMessage() {
}

public MyMessage(MyUser user, String message) {
    super();
    this.sendMessage = message;
    this.senderKey = new Key<MyUser>(MyUser.class, user.getId());
}

[... getters and setters ...]
}
}

那么,什么才是直接的自我参照呢?我的模型有什么问题吗


谢谢。

Key
内部包含对父级
Key
的引用,这是对iteslf的类型参考,即直接自引用。这可能导致无休止的循环,因此Jackson抛出了一个错误


一句话:
Key
不是现成的可序列化的。您可以通过编写自定义Jackson/

来解决问题。请再次查看
Exception
。它抱怨的是
Key
,而不是
MyUser
。什么是
Key.root
?请还包括
Key
的定义。com.my.model.MyMessage[“senderKey”]->com.googlecode.objectify.Key[“根”])。看:Key.root来自com.googlecode.objectify.Key。它不是我代码的一部分…“密钥内部包含对父密钥的引用”这是否意味着我不能将实体发送到客户端???有没有办法解决这个问题??
public class MyUser implements Serializable {

private static final long serialVersionUID = 7390103290165670089L;
@Id private String id;

@SuppressWarnings("unused")
private MyUser() {
    this.setId("default");
}

public MyUser(String mail) {
    this.setId(mail);
}

public void setId(String mail) {
    this.id = mail;
}

public String getId() {
    return id;
}