Désérialiser JSON avec Jackson en types polymorphes : résolution de l'erreur de compilation
En tentant d'implémenter la désérialisation JSON polymorphe à l'aide de Jackson, les utilisateurs peuvent rencontrer le problème de compilation -time erreur "La méthode readValue(JsonParser, Class) dans le type ObjectMapper n'est pas applicable pour les arguments (ObjectNode, Class
Pour résoudre ce problème, envisagez d'utiliser l'approche basée sur les annotations de Jackson pour la désérialisation polymorphe. Cela implique l'ajout des annotations @JsonTypeInfo, @JsonSubTypes et @JsonIgnoreProperties à la classe abstraite Animal et à ses sous-classes (Dog et Cat). Voici un exemple :
@JsonIgnoreProperties(ignoreUnknown = true) @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY) @JsonSubTypes({ @JsonSubTypes.Type(value = Dog.class, name = "Dog"), @JsonSubTypes.Type(value = Cat.class, name = "Cat") }) public abstract class Animal { protected String name; // Getters and setters for the name property }
Dans les sous-classes, vous pouvez spécifier des propriétés supplémentaires si nécessaire. Par exemple, Dog peut avoir une propriétébreed tandis que Cat a une propriété favoriteToy.
Lors de la désérialisation de JSON en un objet Animal, Jackson utilisera la propriété @type pour déterminer la sous-classe spécifique à instancier. Voici un exemple de cas de test :
ObjectMapper objectMapper = new ObjectMapper(); Animal myDog = new Dog("ruffus", "english shepherd"); Animal myCat = new Cat("goya", "mice"); String dogJson = objectMapper.writeValueAsString(myDog); Animal deserializedDog = objectMapper.readValue(dogJson, Animal.class); String catJson = objectMapper.writeValueAsString(myCat); Animal deseriliazedCat = objectMapper.readValue(catJson, Animal.class);
Cette approche permet une désérialisation transparente du JSON polymorphe dans ses sous-classes correspondantes, évitant ainsi l'erreur de compilation mentionnée précédemment.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!