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中文网其他相关文章!