java - 在 Json : What exactly is a "direct self-reference"

标签 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]->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 ...]
}

.

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

那么什么是直接自引用??我的模型有什么问题??

谢谢。

最佳答案

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

底线:Key 不是开箱即用的可序列化的。您可以通过编写自定义 Jackson serializer 来解决问题/deserializer .

关于java - 在 Json : What exactly is a "direct self-reference",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11957251/

相关文章:

c# - 如何在我的 Web 服务 POST 方法中反序列化 JSON

Python 到 JSON 序列化在十进制上失败

python - 两个函数的 yield 可以相减吗?

java - App Engine 上的 getObjectById

java - 如何在 FX 线程上放置某些内容?

java - 如何在 Wicket 口中实现具有 2 个相关下拉菜单的可编辑网格?

java - 如何将 appengine 数据库从一个应用程序复制到另一个应用程序 - java 项目

java - 我可以在 Google App Engine 上实例化 2 个 memcache 类吗?

Java位移位...请解释一下

Web 应用程序中的 Java Spring 错误处理性能