Jackson et JSON polymorphe : résolution des erreurs de compilation pour la désérialisation des nœuds d'objet
Cette enquête vise à résoudre une erreur de compilation rencontrée lors de la désérialisation du JSON polymorphe à l'aide de Jackson. ObjectMapper. Plus précisément, l'erreur réside dans la ligne :
return mapper.readValue(root, animalClass);
Explication du problème :
L'erreur provient d'une inadéquation entre la signature de la méthode readValue() et les arguments fourni. readValue() attend deux arguments : un JsonParser et une Class, mais dans ce code, un ObjectNode (pas un JsonParser) et un sous-type d'Animal (pas Animal lui-même) sont transmis.
Annotation- Solution de polymorphisme basée :
Comme alternative à l'approche basée sur le registre mentionnée dans le didacticiel, envisagez d'utiliser la méthode de Jackson. approche basée sur les annotations pour la désérialisation polymorphe. Cela implique :
Exemple d'implémentation :
// An abstract base class for animals @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 { ... } // Subclass for dogs public class Dog extends Animal { ... } // Subclass for cats public class Cat extends Animal { ... } // Test class public class Test { public static void main(String[] args) { ObjectMapper mapper = new ObjectMapper(); ... // Serialize and deserialize animals as shown in the provided solution } }
En utilisant des annotations, Jackson peut déduire le type de l'objet en fonction des informations de type fournies dans le JSON, évitant ainsi le besoin d'un registre et résolvant l'erreur de compilation.
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!