Rumah >Java >javaTutorial >Bagaimana untuk Memanfaatkan Deserializer Lalai Jackson dalam Deserializer Tersuai?

Bagaimana untuk Memanfaatkan Deserializer Lalai Jackson dalam Deserializer Tersuai?

Patricia Arquette
Patricia Arquetteasal
2024-12-10 09:16:12955semak imbas

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

Cara Memanggil Penyahserialisasi Lalai daripada Penyahserialisasi Tersuai di Jackson

Apabila menyesuaikan penyahserian dalam Jackson, anda mungkin menghadapi keperluan untuk mengakses lalai deserializer untuk mengisi objek anda. Ini boleh dicapai dengan menggunakan BeanDeserializerModifier dan mendaftarkannya melalui SimpleModule.

Berikut ialah contoh pelaksanaan:

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

Dengan mendaftar ini pengubah suai, anda boleh mengakses penyahserialisasi lalai dan pra-isi objek anda dalam tersuai anda deserializer tanpa menyebabkan pengecualian.

Atas ialah kandungan terperinci Bagaimana untuk Memanfaatkan Deserializer Lalai Jackson dalam Deserializer Tersuai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn