Maison > Java > javaDidacticiel > Comment tirer parti du désérialiseur par défaut de Jackson dans un désérialiseur personnalisé ?

Comment tirer parti du désérialiseur par défaut de Jackson dans un désérialiseur personnalisé ?

Patricia Arquette
Libérer: 2024-12-10 09:16:12
original
878 Les gens l'ont consulté

How to Leverage Jackson's Default Deserializer within a Custom Deserializer?

Comment appeler le désérialiseur par défaut à partir d'un désérialiseur personnalisé à Jackson

Lors de la personnalisation de la désérialisation dans Jackson, vous devrez peut-être accéder à la valeur par défaut désérialiseur pour remplir votre objet. Ceci peut être réalisé en employant un BeanDeserializerModifier et en l'enregistrant via un SimpleModule.

Voici un exemple d'implémentation :

public class UserEventDeserializer extends StdDeserializer<User> implements ResolvableDeserializer {

  private final JsonDeserializer<?> defaultDeserializer;

  public UserEventDeserializer(JsonDeserializer<?> defaultDeserializer) {
    super(User.class);
    this.defaultDeserializer = defaultDeserializer;
  }

  @Override
  public User deserialize(JsonParser jp, DeserializationContext ctxt)
      throws IOException, JsonProcessingException {
    User deserializedUser = (User) defaultDeserializer.deserialize(jp, ctxt);

    // Special logic

    return deserializedUser;
  }

  @Override
  public void resolve(DeserializationContext ctxt) throws JsonMappingException {
    ((ResolvableDeserializer) defaultDeserializer).resolve(ctxt);
  }

  public static void main(String[] args) throws Exception {
    SimpleModule module = new SimpleModule();
    module.setDeserializerModifier(new BeanDeserializerModifier() {
      @Override
      public JsonDeserializer<?> modifyDeserializer(DeserializationConfig config, BeanDescription beanDesc,
          JsonDeserializer<?> deserializer) {
        if (beanDesc.getBeanClass() == User.class)
          return new UserEventDeserializer(deserializer);
        return deserializer;
      }
    });

    ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(module);
    User user = mapper.readValue(new File("test.json"), User.class);
  }
}
Copier après la connexion

En enregistrant ce modificateur, vous pouvez accéder au désérialiseur par défaut et pré-remplir votre objet dans votre désérialiseur personnalisé sans provoquer d'exception.

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