Maison > Java > javaDidacticiel > le corps du texte

Comment gérer les erreurs de « Champ non reconnu » lors de la désérialisation de JSON avec Jackson ?

Mary-Kate Olsen
Libérer: 2024-11-17 07:34:03
original
311 Les gens l'ont consulté

How to Handle

Jackson avec JSON : résolution de l'erreur « Champ non reconnu »

Lors de la conversion d'une chaîne JSON en un objet Java à l'aide de Jackson, vous pouvez rencontrer le erreur "Champ non reconnu, non marqué comme ignorable" s'il y a des champs non reconnus dans le JSON. Pour résoudre ce problème, Jackson propose deux options :

Annotation JsonIgnoreProperties

L'annotation @JsonIgnoreProperties vous permet d'ignorer des champs spécifiques dans le POJO lors de la désérialisation. Par exemple, dans votre cas, vous pouvez ignorer le champ « wrapper » :

@JsonIgnoreProperties(ignoreUnknown = true)
class Wrapper { ... }
Copier après la connexion

Cela ignorera toutes les propriétés non reconnues, y compris « wrapper ».

Désérialiseur personnalisé

Si vous avez besoin d'un contrôle plus granulaire sur les propriétés ignorées, vous pouvez créer un désérialiseur personnalisé. Remplacez la méthode de désérialisation pour gérer les champs non reconnus :

public class CustomDeserializer extends JsonDeserializer<Wrapper> {
    @Override
    public Wrapper deserialize(JsonParser parser, DeserializationContext context) throws IOException {
        Wrapper wrapper = new Wrapper();
        ObjectCodec codec = parser.getCodec();
        JsonToken token = parser.getCurrentToken();
        while (token != JsonToken.END_ARRAY) {
            if (token == JsonToken.START_OBJECT) {
                Student student = codec.readValue(parser, Student.class);
                wrapper.getStudents().add(student);
            }
            token = parser.nextToken();
        }
        return wrapper;
    }
}
Copier après la connexion

Ensuite, enregistrez le désérialiseur personnalisé auprès de Jackson :

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new SimpleModule().addDeserializer(Wrapper.class, new CustomDeserializer()));
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal