Я сохраняю полезную нагрузку событий в виде строки json в базу данных. Чтобы иметь только одну версию событий в коде, в то же время имея возможность читать старые события, я хочу «выгружать» сериализованные данные перед десериализацией.
Я думал о чем-то подобном
public Object deserialize(String data, Class<?> clazz) throws IOException {
data = upcaster.upcast(data, clazz);
return objectMapper.readValue(data, clazz);
}
но это означает, что я дважды преобразовываю строку в некоторый объект json. Один раз для передачи данных и один раз внутри стандартного картографа Джексона.
Есть ли способ настроить Джексона между созданием объекта json и созданием объекта моего события?
Что-то вроде:
@override
updateData(clazz, jsonData) {
if(clazz.equals(SpecificEvent.class)) {
if(!jsonData.containsKey("addedInfo")) {
jsonData.put("addedInfo", "foo");
}
}
}
В качестве альтернативы я мог бы добавить свой собственный десериализатор, который изменяет данные json перед вызовом стандартного десериализатора, я думаю?!
Какой нормальный способ сделать что-то подобное с Джексоном?