杰克逊双向序列化与链接对象

时间:2016-09-30 21:26:09

标签: java json serialization jackson

我正在尝试正确地序列化两个对象及其自己的对象可用的对象。我希望能够查看网站管理员,以及用户管理的网站以及特定网站的管理员。我尝试过使用@JSONbackmanaged,它只是提供了ID。这样的事情可能吗?这是伪代码,因此可能存在语法错误,但它尽可能接近。 Hibernate正在管理ORM并加载这些pojos。

public class SiteAdmin {

     private Integer id;
     private Site site;
     private User user;

     @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property="id")
     public Facility getSite() {
        return this.sitey;
     }

     public void setSite(Site site) {
         this.site = site;
     }

     @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property="id")
     public User getUser() {
         return this.user;
     }

     public void setUser(User user) {
        this.user = user;
     }
}

在user.java中我有

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property="id")
public Set<SiteAdmin> getSiteAdmins() {
    return this.siteAdmins;
}

并在site.java中我有

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property="id")
public Set<SiteAdmin> getSiteAdmins() {
    return this.siteAdmins;
}

序列化时我正在寻找的是这样的

for User:

{
   id: 2
   name: 'foo',
   siteAdmin: {
       user: 2,
       site: { id: 6, name: 'site' }
   }
}

对于网站

{
   id: 6
   name: 'site',
   siteAdmins: [
      {
        user: {id : 2, name: 'foo'},
        site: 6 
      },
      {
        user: {id : 3, name: 'bar'},
        site: 6 
      },
   ]
}

相反,我得到的是这样的东西

{
   id: 6
   name: "site",
   siteAdmins: [
      {
        site: {
           id: 6
           name: "site",
           siteAdmins: [ 
             site: 6,
             user: {id : 2, name: "foo"}
           ]
         },
         user: {id : 3, name: "bar"}
       }, 
       1
  ]
}

1 个答案:

答案 0 :(得分:0)

我能够使用@JsonIgnoreProperties而不是@JsonIdentityInfo来解决这个问题。它将忽略集合上的子属性。离。

在site.java中

On page a.html

在user.java中

@JsonIgnoreProperties({"site"})
public Set<SiteAdmin> getSiteAdmins() {
    return this.siteAdmins;
}
相关问题