Heim > Java > javaLernprogramm > Wie kann man Jacksons Standard-Deserializer in einem benutzerdefinierten Deserializer nutzen?

Wie kann man Jacksons Standard-Deserializer in einem benutzerdefinierten Deserializer nutzen?

Patricia Arquette
Freigeben: 2024-12-10 09:16:12
Original
878 Leute haben es durchsucht

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

So rufen Sie den Standard-Deserialisierer von einem benutzerdefinierten Deserialisierer in Jackson auf

Beim Anpassen der Deserialisierung in Jackson müssen Sie möglicherweise auf den Standard zugreifen Deserialisierer, um Ihr Objekt zu füllen. Dies kann erreicht werden, indem ein BeanDeserializerModifier verwendet und über ein SimpleModule registriert wird.

Hier ist eine Beispielimplementierung:

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);
  }
}
Nach dem Login kopieren

Indem Sie dies registrieren Mit dem Modifikator können Sie auf den Standard-Deserialisierer zugreifen und Ihr Objekt in Ihrem benutzerdefinierten Modus vorab auffüllen Deserialisierer, ohne eine Ausnahme auszulösen.

Das obige ist der detaillierte Inhalt vonWie kann man Jacksons Standard-Deserializer in einem benutzerdefinierten Deserializer 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