我正在开发一个Android应用程序,与GAE服务器+ Objectify DB通信。JsonMappingException:如何通过Restlet传递一个Objectify实体(带密钥)
我选择Restlet作为rest框架。
我尝试使用键属性检索实体时出现问题。服务器抛出一个错误:
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"])
这里是我的模型(很简单):
public class MyMessage implements Serializable {
private static final long serialVersionUID = -1075184303389185795L;
@Id
private Long id;
@Unindexed
private String sendMessage;
@Parent
Key<MyUser> senderKey;
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;
private MyUser() {
this.setId("default");
}
public MyUser(String mail) {
this.setId(mail);
}
[... getters and setters ...]
}
我能做些什么来解决这个问题?
为什么我不能为我的密钥添加'瞬态'?我试过但我仍然得到相同的错误.... – Tyvain 2012-09-04 23:46:03
我也试过@JsonIgnore,但它不工作... – Tyvain 2012-09-05 23:24:45
要么隐藏Jackson的senderKey字段,要么找出如何自定义Restlet使用的ObjectMapper,以便它序列化键作为它们的字符串属性。我不知道为什么@JsonIgnore没有工作,但这是一个杰克逊问题 - 可能与您放置注释的位置(字段,getter等)有关。 – stickfigure 2012-09-06 06:42:36