Bonjour,

j'apprends Spring Boot et pour mettre en avant mes compétences, je fais une application. Je suis malheureusement confronté à un souci depuis deux jours. Je m'explique: je suis en train une appli de facturation en essayant de relier des utilisateurs (propriétaires et/ou locataires) avec les biens.
J'ai 3 entités (Utilisateur, Bien et Utilisateur_biens_roles).

Utilisateur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Entity
public class User {
    @Id
 
    @Email
    @NotEmpty
    @Column(unique = true)
    private String email;
 
    @NotEmpty
    private String firstname;
 
    @NotEmpty
    private String username;
 
    @Size(min = 5, max = 60)
    private String password;
 
    private int tel;
Bien:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@Entity
public class Bien {
 
    @Id
    @GeneratedValue
    private int id;
 
    private int prix;
 
    @NotEmpty
    private String rue;
 
    private String complement;
 
    @NotEmpty
    private String ville;
 
    private int code;
 
    @NotEmpty
    private String region;
 
    @NotEmpty
    @Column(unique = true)
    private String uniqid = Long.toString(new Timestamp(System.currentTimeMillis()).getTime());
UserBienRoles:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
@Entity
public class UserBienRoles {
    @Id
    @GeneratedValue
    private int id;
 
    @ManyToOne
    @JoinColumn(name="user_email")
    private User user;
 
    @ManyToOne
    @JoinColumn(name="bien_id")
    private Bien bien;
 
    private String role;
 
 
Dans mon controller:
@RequestMapping(value = "/add-lien", method = RequestMethod.GET)
    public String add(Model model){
 
        model.addAttribute("userBienRoles", new UserBienRoles());
        model.addAttribute("users",userServices.findAll());
        model.addAttribute("biens",bienServices.findAll());
        model.addAttribute("bienById",bienServices.findByUniqid(1));
 
 
        return "views/user_bien/add";
    }
 
    @RequestMapping(value = "/add-lien", method = RequestMethod.POST)
    public String add(@Valid UserBienRoles userBienRoles, BindingResult bindingResult, @RequestBody MultiValueMap<String, String> formData) {
 
        if(bindingResult.hasErrors() ) {
            System.out.println(bindingResult);
            return "views/user_bien/add";
        }
 
        userBienRolesServices.createBien(userBienRoles);
 
        return "views/user_bien/list";
    }
Dans thymeleaf:
Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
   <form method="post" th:action="@{/add-lien}" th:object="${userBienRoles}">
 
        <div class="form-group">
            <label for="user">Liste des utilisateurs </label>
            <select class="form-control" id="user" name="user" th:field="*{user}">
                <option th:each="user:${users}" th:value="${user.email}"
                        th:text="${user.username}+''+${user.firstname}"></option>
 
            </select>
        </div>
 
        <div class="form-group">
            <label for="bien">Liste des Biens </label>
            <select multiple class="form-control" id="bien" name="bien" th:field="*{bien}">
                <option th:each="bien:${biens}" th:value="${bien.id}"
                        th:text="${bien.rue}+' - '+${bien.complement}+' - '+${bien.code}+' '+${bien.ville}+' '
                        +${bien.region}"></option>
 
            </select>
        </div>
 
        <div class="form-group">
            <label for="role">Liste des roles </label>
            <select multiple class="form-control" id="role" th:field="*{role}">
                <option th:value="'proprietaire'" th:text="Propriétaire"></option>
                <option th:value="'agent'" th:text="Agent"></option>
                <option th:value="'locataire'" th:text="Locataire"></option>
            </select>
 
            <div class="text text-danger" th:if="${#fields.hasErrors('role')}"
                 th:errors="*{role}">
            </div>
        </div>
 
        <input type="submit" value="Ajouter un bien" class="btn btn-primary" />
    </form>

Du coup:
Ce que je comprens pas pour l'user, j'ai aucun souci
Par contre, Bien j'ai l'erreur ci dessous

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
org.springframework.validation.BeanPropertyBindingResult: 1 errors
Field error in object 'userBienRoles' on field 'bien': rejected value [1]; codes [typeMismatch.userBienRoles.bien,typeMismatch.bien,typeMismatch.com.renttracker.renttrackeriknsa.Entity.Bien,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [userBienRoles.bien,bien]; arguments []; default message [bien]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'com.renttracker.renttrackeriknsa.Entity.Bien' for property 'bien'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@javax.persistence.ManyToOne @javax.persistence.JoinColumn com.renttracker.renttrackeriknsa.Entity.Bien] for value '1'; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Provided id of the wrong type for class com.renttracker.renttrackeriknsa.Entity.Bien. Expected: class java.lang.Integer, got class java.lang.String; nested exception is java.lang.IllegalArgumentException: Provided id of the wrong type for class com.renttracker.renttrackeriknsa.Entity.Bien. Expected: class java.lang.Integer, got class java.lang.String]
Avec le débogueur de intelij, bien est à nul
dans mon navigateur, j'ai
user: test@test.com
_bien: 1
bien: 1
_role: 1
role: proprietaire

Quelqu'un aurait un idée svp ?
Merci d'avance