Maison >Java >javaDidacticiel >Comment accéder au désérialiseur Jackson par défaut dans un désérialiseur personnalisé ?
Accès au désérialiseur par défaut dans le désérialiseur personnalisé de Jackson
Lors de la personnalisation de la désérialisation dans Jackson, il peut y avoir des scénarios dans lesquels vous devez tirer parti du comportement de désérialisation par défaut avant d'appliquer une logique personnalisée. Pour répondre à cette exigence, voici un guide complet pour accéder au désérialiseur par défaut à partir d'un désérialiseur personnalisé.
Considérez le scénario suivant :
public class UserEventDeserializer extends StdDeserializer<User> { public UserEventDeserializer() { super(User.class); } @Override public User deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException { User deserializedUser = null; try { deserializedUser = super.deserialize(jp, ctxt, new User()); } catch (UnsupportedOperationException e) { // Access default Jackson deserializer here } // Perform custom logic on deserializedUser... return deserializedUser; } }
Solution : BeanDeserializerModifier
L'approche recommandée pour accéder au désérialiseur par défaut consiste à utiliser un BeanDeserializerModifier. Cela vous permet de modifier le comportement par défaut de classes de bean spécifiques, dans ce cas, User.
public class UserDeserializerModifier extends BeanDeserializerModifier { @Override public JsonDeserializer<?> modifyDeserializer(DeserializationConfig config, BeanDescription beanDesc, JsonDeserializer<?> deserializer) { if (beanDesc.getBeanClass() == User.class) { return new JsonDeserializer<>(); // Default deserializer } return super.modifyDeserializer(config, beanDesc, deserializer); } }
Exemple d'utilisation
Pour utiliser le modificateur personnalisé, enregistrez-le avec un SimpleModule et configurez-le sur votre ObjectMapper :
SimpleModule module = new SimpleModule(); module.setDeserializerModifier(new UserDeserializerModifier()); ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(module);
Remarque : Implémentation ResolvableDeserializer peut être nécessaire pour éviter JsonMappingException lors de l'utilisation de cette approche.
Approches alternatives
Bien que BeanDeserializerModifier soit une solution fiable et flexible, voici quelques approches alternatives :
Conclusion
Par See More en tirant parti de BeanDeserializerModifier, vous pouvez accéder et utiliser efficacement le désérialiseur Jackson par défaut dans votre désérialiseur personnalisé, permettant un comportement de désérialisation flexible et efficace.
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!