У меня проблема с моим пользовательским десериализатором в Джексоне. Я хочу получить доступ к сериализатору по умолчанию, чтобы заполнить объект, в который я десериализуюсь. После пополнения я сделаю некоторые пользовательские вещи, но сначала я хочу десериализовать объект с поведением Джексона по умолчанию.
Это код, который у меня есть на данный момент.
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. Это вызывает исключение Stack Overflow по очевидным причинам.
Я попытался инициализировать a, BeanDeserializer
но процесс чрезвычайно сложен, и мне не удалось найти правильный способ сделать это. Я также безуспешно пытался перегрузить AnnotationIntrospector
файл, думая, что это может помочь мне игнорировать аннотацию в DeserializerContext
. Наконец, похоже, что я мог бы добиться успеха, JsonDeserializerBuilders
хотя для этого мне потребовалось кое-что волшебное, чтобы получить контекст приложения из Spring. Я был бы признателен за любую вещь, которая могла бы привести меня к более чистому решению, например, как я могу создать контекст десериализации, не читая JsonDeserializer
аннотацию.
DeserializationContext
это не то, что вы должны создавать или изменять; это будет предоставленоObjectMapper
.AnnotationIntrospector
, также не поможет в получении доступа.