2017-10-09 9 views
0

Je suis en train de développer une application web de repos avec framework Spring, Hibernate et JSON. Supposons que j'ai deux entités comme ci-dessous:Spring Rest et Hibernate et JSON dosnt fonctionnent comme prévu

University.java

public class University extends BaseEntity { 

    private String name; 
    private String address; 
    private String telephon; 


    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER,orphanRemoval = true,mappedBy = "university") 
    @JsonManagedReference 
    private List<Student> students=new ArrayList<>(); 
// setter an getter 
} 

Student.java

public class Student extends BaseEntity{ 

    private String firstName; 

    private String lastName; 

    private String section; 

    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "UNIVERSITY_ID",nullable = false) 
    @JsonBackReference 
    private University university; 

// setter an getter 
    } 

Mon exigence:

Quand j'appelle la liste étudiant api, j'ai besoin avoir un objet Usiversité dans chaque objet étudiant, De quel type de config ou d'annotation j'ai besoin pour gérer cette situation? le résultat est:

[ 
    { 
     "id": 1, 
     "firstName": "aa", 
     "lastName": "aa", 
     "section": "aa" 
    }, 
    { 
     "id": 2, 
     "firstName": "bb", 
     "lastName": "bb", 
     "section": "bb" 
    }, 
    { 
     "id": 3, 
     "firstName": "cc", 
     "lastName": "cc", 
     "section": "cc" 
    } 
] 

et je dois avoir cette réponse quand je l'appelle liste des étudiants

[ 
    { 
     "id": 1, 
     "firstName": "aa", 
     "lastName": "aa", 
     "section": "aa", 
     "university": { 
      "id": 1, 
      "name": "string", 
      "address": "string", 
      "telephon": "string" 
     } 
    }, 
    { 
     "id": 2, 
     "firstName": "bb", 
     "lastName": "bb", 
     "section": "bb", 
     "university": { 
      "id": 1, 
      "name": "string", 
      "address": "string", 
      "telephon": "string" 
     } 
    }, 
    { 
     "id": 3, 
     "firstName": "cc", 
     "lastName": "cc", 
     "section": "cc", 
     "university": { 
      "id": 3, 
      "name": "www", 
      "address": "www", 
      "telephon": "www" 
     } 
    } 
] 

mise à jour:

et pour la liste universitaire j'ai besoin cette réponse

[ 
    { 
     "id": 1, 
     "name": "string", 
     "address": "string", 
     "telephon": "string", 
     "students": [ 
      { 
       "id": 1, 
       "firstName": "aa", 
       "lastName": "aa", 
       "section": "aa" 
      }, 
      { 
       "id": 2, 
       "firstName": "bb", 
       "lastName": "bb", 
       "section": "bb" 
      } 
     ] 
    }, 
    { 
     "id": 3, 
     "name": "www", 
     "address": "www", 
     "telephon": "www", 
     "students": [ 
      { 
       "id": 3, 
       "firstName": "cc", 
       "lastName": "cc", 
       "section": "cc" 
      } 
     ] 
    } 
] 

Toute aide et conseil apprécié.

Répondre

1

Je pense que vous avez l'annotation Jackson a déclaré dans le mauvais sens:

@JsonManagedReference est la partie avant de référence - celui qui obtient sérialisé normalement. @JsonBackReference est la partie arrière de la référence - elle sera omise de la sérialisation.

+0

J'ai besoin d'avoir @JsonManagedReference du côté de l'université. parce que si je l'enlève je ne peux pas obtenir la liste d'université avidement. – Generic

+0

Pourquoi? L'un est JPA l'autre est la sérialisation JSON. –

+0

jpa le faire parfaitement, Mais quand j'ai besoin des deux côtés avidement, il a des ennuis avec JSON. Quel côté a @JsonManagedReference cela fonctionnera. – Generic