ホームページ > Java > &#&チュートリアル > カスタム デシリアライザー内で Jackson のデフォルトのデシリアライザーを活用するにはどうすればよいですか?

カスタム デシリアライザー内で Jackson のデフォルトのデシリアライザーを活用するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-10 09:16:12
オリジナル
907 人が閲覧しました

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

Jackson でカスタム デシリアライザーからデフォルトのデシリアライザーを呼び出す方法

Jackson でデシリアライゼーションをカスタマイズする場合、デフォルトのデシリアライザーにアクセスする必要がある場合があります。デシリアライザーを使用してオブジェクトを設定します。これは、BeanDeserializerModifier を使用し、SimpleModule 経由で登録することで実現できます。

実装例を次に示します。

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);
  }
}
ログイン後にコピー

これを登録することで、修飾子を使用すると、デフォルトのデシリアライザーにアクセスし、カスタム デシリアライザー内にオブジェクトを事前に設定できます。例外は発生しません。

以上がカスタム デシリアライザー内で Jackson のデフォルトのデシリアライザーを活用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート