I am trying to persist a user object that has a many-to-many relationship with role objects. When I save my user, I get the list of a role for that user, but in my ResponseEntity object I got an empty list of roles
My entities
@Entity
@Table(name = "RoleUtilisateur")
public class RoleEntite {
@Id
@Column(name = "role_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String nom;
public RoleEntite() {
super();
// TODO Auto-generated constructor stub
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
}
@Entity
@Table(name = "Utilisateurs")
public class UserEntite {
@Id
@Column(name = "utilisateur_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String nom;
private String prenom;
private String email;
private String password;
// Permettant d'activer ou désactiver le compte
private boolean actived;
// @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "users_roles", joinColumns = @JoinColumn(name = "utilisateur_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
private List<RoleEntite> roles = new ArrayList<RoleEntite>();
public UserEntite() {
super();
// TODO Auto-generated constructor stub
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getPrenom() {
return prenom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean isActived() {
return actived;
}
public void setActived(boolean actived) {
this.actived = actived;
}
@JsonIgnore
public List<RoleEntite> getRoles() {
return roles;
}
public void setRoles(List<RoleEntite> roles) {
this.roles = roles;
}
}
My UserServiceImpl
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserRepository userRepository;
@Autowired
private RoleRepository roleRepository;
@Autowired
private BCryptPasswordEncoder bCryptPasswordEncoder;
@Override
public UserEntite createUser(UserEntite user) {
UserEntite checkUser = userRepository.findByEmail(user.getEmail());
if (checkUser != null)
throw new RuntimeException("L'utilisateur existe deja en Base de donnée !");
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
List<RoleEntite> mesRoles = new ArrayList<RoleEntite>();
if (user.getRoles() != null) {
for (RoleEntite role : user.getRoles()) {
RoleEntite unRole = roleRepository.findByNom(role.getNom());
mesRoles.add(unRole);
}
user.setRoles(mesRoles);
}
UserEntite newUser = userRepository.save(user);
return newUser;
}
}
My DTO
public class UserRequest {
private String nom;
private String prenom;
private String email;
private String password;
@NotNull(message = "Ce champ ne doit etre null !")
private boolean actived;
private List<RoleEntiteRequest> roles;
public UserRequest() {
super();
// TODO Auto-generated constructor stub
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getPrenom() {
return prenom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean isActived() {
return actived;
}
public void setActived(boolean actived) {
this.actived = actived;
}
public List<RoleEntiteRequest> getRoles() {
return roles;
}
public void setRoles(List<RoleEntiteRequest> roles) {
this.roles = roles;
}
}
public class UserResponse {
private Long id;
private String nom;
private String prenom;
private String email;
boolean actived;
private List<RoleEntiteResponse> roles = new ArrayList<RoleEntiteResponse>();
public UserResponse() {
super();
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getPrenom() {
return prenom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public boolean isActived() {
return actived;
}
public void setActived(boolean actived) {
this.actived = actived;
}
public List<RoleEntiteResponse> getRole() {
return roles;
}
public void setRole(List<RoleEntiteResponse> role) {
this.roles = role;
}
}
My controller
@RequestMapping(value="users", method = RequestMethod.POST, produces = "application/json", consumes = "application/json")
public ResponseEntity<UserResponse> saveUser(@Valid @RequestBody UserRequest userRequest) throws Exception {
ModelMapper modelMapper = new ModelMapper();
UserEntite userDto = modelMapper.map(userRequest, UserEntite.class);
UserEntite createUser = userService.createUser(userDto);
int id = createUser.getId().intValue();
UserResponse userResponse = modelMapper.map(createUser, UserResponse.class);
return new ResponseEntity<UserResponse>(userResponse, HttpStatus.CREATED);
}
My problem is when I call my rest API in postman I get the UserResponseEntite with a UserResponse containing an empty role list. But the createUser variable contains a list of roles. When I map this object to UserResponse class, I get an empty role list. Can you help me, please?

