Heim > Java > javaLernprogramm > Wie kann ich das Standard-Deserialisierungsverhalten innerhalb eines benutzerdefinierten Jackson-Deserialisierers nutzen?

Wie kann ich das Standard-Deserialisierungsverhalten innerhalb eines benutzerdefinierten Jackson-Deserialisierers nutzen?

Susan Sarandon
Freigeben: 2024-12-03 15:44:10
Original
900 Leute haben es durchsucht

How Can I Leverage Default Deserialization Behavior Within a Custom Jackson Deserializer?

Benutzerdefinierte Deserialisierung mit Standardverhalten in Jackson

Bei der Implementierung eines benutzerdefinierten Deserialisierers in Jackson kann es erforderlich sein, den Standard-Deserialisierer zu verwenden, um Füllen Sie ein Objekt, bevor Sie benutzerdefinierte Logik anwenden. In diesem Artikel geht es um die Herausforderung, von einem benutzerdefinierten auf den Standard-Deserializer zuzugreifen.

Um dies zu erreichen, erstellen Sie einen BeanDeserializerModifier und registrieren Sie ihn mit einem SimpleModule. Hier ist ein Beispiel:

public class UserEventDeserializer extends StdDeserializer<User> implements ResolvableDeserializer {

    private static final long serialVersionUID = 7923585097068641765L;

    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 JsonParseException, JsonMappingException, IOException {
        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);
    }
}
Nach dem Login kopieren

In diesem Beispiel:

  1. UserEventDeserializer erweitert sowohl StdDeserializer als auch ResolvableDeserializer.
  2. Es verwendet den Standard-Deserializer als Konstruktorargument.
  3. Die Deserialisierungsmethode deserialisiert zunächst mit Der Standard-Deserializer wendet dann benutzerdefinierte Logik auf das resultierende Objekt an.
  4. Es implementiert ResolvableDeserializer, um Zuordnungsausnahmen zu vermeiden.
  5. Ein BeanDeserializerModifier wird verwendet, um den Standard-Deserializer für Benutzer durch den benutzerdefinierten Deserializer zu ersetzen.

Durch die Registrierung dieses Moduls bei einem ObjectMapper erfolgt die benutzerdefinierte Deserialisierung Logik kann verwendet werden und dennoch vom Standardverhalten für andere Klassen profitieren.

Das obige ist der detaillierte Inhalt vonWie kann ich das Standard-Deserialisierungsverhalten innerhalb eines benutzerdefinierten Jackson-Deserialisierers nutzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage