2016-09-30 2 views
0

Я пытаюсь правильно сериализовать объект, доступный для двух объектов, а также для собственного объекта. Я хочу видеть администраторов сайта, а также сайтов, на которых пользователь является администратором, и администраторов определенного сайта. Я попытался использовать @JSONbackmanaged, и он просто дал только идентификаторы. Что-то вроде этого возможно? Это psuedocode, поэтому возможны синтаксические ошибки, но это как можно ближе. Hibernate управляет ORM и загрузкой этих pojos.Jackson Двунаправленная сериализация со связующим объектом

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

То, что я ищу, когда я сериализации что-то вроде этого

для пользователя:

{ 
    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 
    ] 
} 

ответ

0

Я был в состоянии решить это с помощью @JsonIgnoreProperties вместо @JsonIdentityInfo. Он игнорирует дочерние свойства на множестве. ех.

В site.java

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

В user.java

@JsonIgnoreProperties({"user"}) 
public Set<SiteAdmin> getSiteAdmins() { 
    return this.siteAdmins; 
} 
Смежные вопросы