json бесконечная рекурсия во многих отношениях - PullRequest
0 голосов
/ 12 июля 2020
@Entity
@Table(name = "people")
public class People {
@ManyToMany(fetch = FetchType.LAZY,
               cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, 
                           CascadeType.REFRESH})
@JoinTable(name = "bank_people",
                     joinColumns = @JoinColumn(name = "people_id"),
                     inverseJoinColumns = @JoinColumn(name = "bank_id"))
private List<Bank> banks;

}
     
 @Entity
 @Table(name = "bank")
 public class Bank {
 @ManyToMany(fetch = FetchType.LAZY,
                            cascade = {CascadeType.DETACH, CascadeType.MERGE, 
                                  CascadeType.PERSIST, CascadeType.REFRESH})
 @JoinTable(name = "bank_people",
                        joinColumns = @JoinColumn(name = "bank_id"),
                        inverseJoinColumns = @JoinColumn(name = "people_id"))
 private List<People> peoples;
 }

Когда я использую отношения Many To Many, он зацикливается в json, поэтому я использовал @JsonBackReference и @JsonManagedReference, но он возвращался, как показано ниже

, когда я искал / api / people

[
{
    "id": 1,
    "name": "John",
    "accountNumber": "123456",
    "accountType": "SA",
    "banks": [
        {
            "id": 1,
            "bankName": "Indian Bank",
            "branch": "Attur",
            "branchCode": "IDIBATR01"
        },
        {
            "id": 2,
            "bankName": "State Bank of India",
            "branch": "Salem",
            "branchCode": "SBIASLM01"
        }
    ]
},

при поиске / api / banks будет возвращаться только банки, а не люди

[
{
    "id": 1,
    "bankName": "Indian Bank",
    "branch": "Attur",
    "branchCode": "IDIBATR01"
},
{
    "id": 2,
    "bankName": "State Bank of India",
    "branch": "Salem",
    "branchCode": "SBIASLM01"
}

]

помогите, пожалуйста, переслать, как вернуть людей также в / api / банки как первый

1 Ответ

0 голосов
/ 12 июля 2020

То, как работают @JsonManagedReference и @JsonBackReference

@ JsonManagedReference - это прямая часть ссылки - та, которая сериализуется нормально. @JsonBackReference - это задняя часть ссылки - она ​​будет опущена при сериализации.

Это означает, что сериализация одной стороны пропущена, а другая сторона будет сериализована нормально. Вот почему банк внутри людей сериализован, а люди внутри банка опущены.

Если вы хотите, чтобы обе стороны сериализовались нормально, используйте @JsonIdentityInfo

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class People { ... }

@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
public class Bank { ... }

Здесь id должен быть первичным ключом или уникальный ключ для идентификации каждого объекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...