SPRING: typeMismatch object
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:
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:
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:
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:
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:
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
Quelqu'un aurait un idée svp ?
Merci d'avance