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 サイトの他の関連記事を参照してください。