Jackson のデフォルト動作によるカスタム デシリアライゼーション
Jackson でカスタム デシリアライザを実装する場合、事前にデフォルトのデシリアライザを利用する必要がある場合があります。カスタム ロジックを適用する前にオブジェクトを設定します。この記事では、カスタム デシリアライザーからデフォルトのデシリアライザーにアクセスするという課題について説明します。
これを実現するには、BeanDeserializerModifier を作成し、SimpleModule を使用して登録します。以下に例を示します:
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); } }
この例では:
このモジュールをObjectMapper、カスタム逆シリアル化ロジックは、他のクラスのデフォルト動作の恩恵を受けながらも使用できます。
以上がカスタム Jackson デシリアライザー内でデフォルトのデシリアライゼーション動作を利用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。