Jackson Custom Deserializer のデフォルトのデシリアライザへのアクセス
Jackson でデシリアライゼーションをカスタマイズする場合、デフォルトのデシリアライゼーション動作を利用する必要があるシナリオが存在する場合があります。カスタム ロジックを適用する前に。この要件に対処するために、カスタム デシリアライザー内からデフォルトのデシリアライザーにアクセスするための包括的なガイドを次に示します。
次のシナリオを考えてみましょう。
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; } }
解決策: BeanDeserializerModifier
デフォルトのデシリアライザーにアクセスするための推奨されるアプローチは、 BeanDeserializerModifier。これにより、特定の Bean クラス (この場合は 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); } }
使用例
カスタム修飾子を使用するには、それを登録しますSimpleModule を使用してそれを設定しますObjectMapper:
SimpleModule module = new SimpleModule(); module.setDeserializerModifier(new UserDeserializerModifier()); ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(module);
注: このアプローチを使用する場合、JsonMappingException を回避するには、ResolvableDeserializer の実装が必要になる場合があります。
代替アプローチ
BeanDeserializerModifier が信頼性が高く柔軟なソリューションです。代替アプローチをいくつか示します。
結論
BeanDeserializerModifier を活用すると、カスタム デシリアライザー内のデフォルトの Jackson デシリアライザーに効果的にアクセスして利用でき、柔軟で効率的なデシリアライズ動作が可能になります。 .
以上がカスタム デシリアライザー内のデフォルトの Jackson デシリアライザーにアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。