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

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-17 07:34:03393parcourir

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 { ... }

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;
    }
}

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

ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new SimpleModule().addDeserializer(Wrapper.class, new CustomDeserializer()));

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!

Déclaration:
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