J'ai construit un objet Java en utilisant lombok avec un modèle de générateur. Mais, j'obtiens l'exception suivante lorsque j'essaie de désérialiser un objet Java en utilisant Jackson. Cela se produit pour les champs qui ont @JsonProperty
annotation.
Exception dans le thread "principal" com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: champ non reconnu "nom_utilisateur" (classe User $ UserBuilder), non marqué comme ignorable (2 propriétés connues: "nom_utilisateur", "ID_utilisateur"]))
sur [Source: (String) "{" userId ": 1," user_name ":" username "}"; ligne: 1, colonne: 26] (via la chaîne de référence: User $ UserBuilder ["nom_utilisateur"])
Code utilisé:
public class TestJson {
public static void main(String args[]) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
User user = User.builder()
.userName("username")
.userId(1)
.build();
System.out.println(user);
String string = objectMapper.writeValueAsString(user);
System.out.println(string);
user = objectMapper.readValue(string, User.class);
System.out.println(user);
}
}
@JsonDeserialize(builder = User.UserBuilder.class)
@Getter
@ToString
@Builder(toBuilder = true)
class User {
@JsonProperty("user_name")
@NonNull
private String userName;
@JsonProperty
private int userId;
@JsonPOJOBuilder(withPrefix = "")
public static class UserBuilder {
}
}
Veuillez m'aider à résoudre ce problème.
Merci.
Vous obtenez cette erreur parce que Jackson ne sait pas mapper user_name
À l'un de vos champs UserBuilder
.
Vous avez également besoin de @JsonProperty("user_name")
dans le champ userName
de UserBuilder
, comme ceci:
@JsonPOJOBuilder(withPrefix = "")
public static class UserBuilder {
@JsonProperty("user_name")
@NonNull
private String userName;
}
Votre mappeur doit avoir un moyen de créer une classe d'utilisateurs.
Vous pouvez utiliser le constructeur:
@NoArgsConstructor
@AllArgsConstructor
@Getter
@ToString
@Builder
class User {
@JsonProperty("user_name")
@NonNull
private String userName;
private int userId;
}
... ou pointez-le vers le constructeur selon Tomasz Linkowski 's answer