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