В Springboot я не могу получить JSON для многих с атрибутом на моем контроллере REST - PullRequest
0 голосов
/ 17 марта 2020

У меня есть API-интерфейс SpringBoot REST, в котором один или несколько пользователей являются частью одной или нескольких команд (Equipe), но у них есть роль для каждой команды.

Когда я запрашиваю свой UserRepository.findAll (), Я хотел бы получить все мои пользователи и их команды и роли. Но когда я запрашиваю свой TeamRepository.findAll (), я хотел бы получить информацию обо всех моих командах, их пользователях и их ролях.

Но я не знаю, как получить двунаправленный запрос. Я пробовал с @jsonmanagedreference и @jsonbackreference, но это позволяет мне получать команды только от пользователя, а не наоборот.

В настоящее время у меня есть

[
{  
        "id": 1,  
        "prenom": "TestPrenom1",  
        "nom": "TestNom1",  
        "roleUserEquipe": []  
}
{  
        "id": 2,  
        "prenom": "TestPrenom2",  
        "nom": "TestNom2",  
        "roleUserEquipe": []  
}
]

Но я хочу

[
{  
        "id": 1,  
        "prenom": "TestPrenom1",  
        "nom": "TestNom1",  
        "roleUserEquipe": [  
                {
                        "role": "Role1",
                        "team": {
                        "id": 1,  
                                "nom": "Team1"
                        }
                }
        ]  
}
{  
        "id": 2,  
        "prenom": "TestPrenom2",  
        "nom": "TestNom2",  
        "roleUserEquipe": [  
                {
                        "role": "Role2",
                        "team": {
                                "nom": "Team1"
                        }
                }
        ]  
}
]

И когда я запрашиваю мои команды, у меня есть

[
    {
        "id": 1,
        "nom": "Team1",
        "roleUserEquipe": [
            {}
        ]
    },
    {
        "id": 2,
        "nom": "Team2",
        "roleUserEquipe": [
            {}
        ]
    }
]

Но я бы хотел

[
    {
        "id": 1,
        "nom": "Team1",
        "roleUserEquipe": [
                {
                        "role": "Role1",
                        "user": {
                                "id": 1,  
                                "prenom": "TestPrenom1",  
                                "nom": "TestNom1",  
                        }
                },
                {
                        "role": "Role2",
                        "user": {
                                "id": 2,  
                                "prenom": "TestPrenom2",  
                                "nom": "TestNom2",  
                        }
                }
        ]
    },
    {
        "id": 2,
        "nom": "Team2",
        "roleUserEquipe": []
    }
]

Мой пользователь. java


@Entity
@JsonIdentityInfo(generator= ObjectIdGenerators.PropertyGenerator.class, property="id")
public class User implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;
    private String prenom;
    private String nom;

    @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private Set<RoleUserEquipe> roleUserEquipe = new HashSet<>();

//GETTERS AND SETTERS AND CONSTRUCTORS

}

My Equipe. java (Team)


@Entity
@JsonIdentityInfo(generator= ObjectIdGenerators.PropertyGenerator.class, property="id")
public class Equipe implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;
    private String nom;

    @OneToMany(mappedBy = "equipe", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private Set<RoleUserEquipe> roleUserEquipe = new HashSet<>();

//GETTERS AND SETTERS AND CONSTRUCTORS

}

My RoleUserEquipe. java

@Entity
public class RoleUserEquipe implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "equipe_id")
    private Equipe equipe;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "user_id")
    private User user;

    private String role;

//GETTERS AND SETTERS AND CONSTRUCTORS

}

EDIT:
При отладке субобъекты в порядке: они содержат значения, которые мне нужны.
Только при возврате ответа JSON они теряют свои значения

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Вы не показали нам, как вы преобразовываете свои доменные объекты в объекты ресурсов / DTO.

Используете ли вы среду Spring ConversionService Framework? Если это так, покажите нам конвертер, который вы написали. Может быть, ваш конвертер не принимает во внимание роли?

0 голосов
/ 18 марта 2020

Я не уверен, что это сработает, но попробуйте удалить новые ключевые слова в:

 @OneToMany(mappedBy = "equipe", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
 private Set<RoleUserEquipe> roleUserEquipe = new HashSet<>();

@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<RoleUserEquipe> roleUserEquipe = new HashSet<>();

до

  @OneToMany(mappedBy = "equipe", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
  private Set<RoleUserEquipe> roleUserEquipe;

  @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
  private Set<RoleUserEquipe> roleUserEquipe;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...