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