我在Jackson的自定义解串器中遇到问题。我想访问默认的序列化器以填充要反序列化的对象。填充之后,我将执行一些自定义操作,但首先,我想使用默认的Jackson行为反序列化对象。
这是我目前拥有的代码。
public class UserEventDeserializer extends StdDeserializer<User> {
private static final long serialVersionUID = 7923585097068641765L;
public UserEventDeserializer() {
super(User.class);
}
@Override
@Transactional
public User deserialize(JsonParser jp, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
ObjectCodec oc = jp.getCodec();
JsonNode node = oc.readTree(jp);
User deserializedUser = null;
deserializedUser = super.deserialize(jp, ctxt, new User());
// The previous line generates an exception java.lang.UnsupportedOperationException
// Because there is no implementation of the deserializer.
// I want a way to access the default spring deserializer for my User class.
// How can I do that?
//Special logic
return deserializedUser;
}
}
我需要的是一种初始化默认反序列化器的方法,以便在启动特殊逻辑之前可以预先填充POJO。
从自定义反序列化器中调用反序列化时,无论我如何构造序列化器类,似乎都是从当前上下文中调用该方法。由于我的POJO中有注释。由于明显的原因,这会导致堆栈溢出异常。
我曾尝试初始化a,BeanDeserializer
但过程极其复杂,而且我还没有设法找到正确的方法。我也曾尝试重载AnnotationIntrospector
,但毫无用处,以为这可能会帮助我忽略中的注释DeserializerContext
。最终,它表明我可能已经取得了一些成功,JsonDeserializerBuilders
尽管这需要我做一些魔术工作才能掌握Spring的应用程序上下文。我将不胜感激任何可以引导我使用更简洁解决方案的方法,例如,如何在不阅读JsonDeserializer
注释的情况下构造反序列化上下文。
DeserializationContext
不是您应该创建或更改的内容;它将由提供ObjectMapper
。AnnotationIntrospector
,同样,在获取访问权限方面也无济于事。