У мене проблема в моєму користувальницькому десеріалізаторі в Джексоні. Я хочу отримати доступ до серіалізатора за замовчуванням, щоб заповнити об'єкт, в який я десеріалізуюсь. Після населення я зроблю деякі спеціальні речі, але спершу я хочу знецінити об'єкт за поведінкою Джексона за замовчуванням.
Це код, який у мене є на даний момент.
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, перш ніж запустити свою спеціальну логіку.
Під час виклику deserialize зсередини користувальницького десеріалізатора. Здається, метод викликається з поточного контексту незалежно від того, як я будую клас серіалізатора. Через анотацію в моєму POJO. Це викликає виняток переповнення стека з очевидних причин.
Я спробував ініціалізувати, BeanDeserializer
але процес надзвичайно складний, і мені не вдалося знайти правильний спосіб зробити це. Я також спробував перевантажити AnnotationIntrospector
безрезультатно, думаючи, що це може допомогти мені ігнорувати анотацію в DeserializerContext
. Нарешті, це, здається, я мав би певний успіх у використанні, JsonDeserializerBuilders
хоча це вимагало від мене зробити якісь магічні речі, щоб отримати сприятливий контекст програми від Spring. Я вдячний за будь-яку річ, яка могла б привести мене до більш чіткого рішення, наприклад, як я можу побудувати контекст десеріалізації, не читаючи JsonDeserializer
анотацію.
DeserializationContext
це не те, що ви повинні або створити, або змінити; це буде наданоObjectMapper
.AnnotationIntrospector
також не допоможе отримати доступ.