Я пытаюсь десериализовать Json в существующий экземпляр в моем процессе. Таким образом, он создает новый экземпляр, только если он не существует. Все объекты содержат идентификатор для их идентификации.
Я использовал этот ответ: https://stackoverflow.com/a/18405958/11584969 и попытался создать десериализатор custon для этого.
До сих пор мне удалось создать десериализатор custon, который проверяет существующие экземпляры, но я не смог заполнить новый экземпляр или изменить существующий.
Моя функция десериализации:
public T deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
JsonNode node = jp.getCodec().readTree(jp);
if (node instanceof NullNode) {
return null;
}
// get id from node
String strId = node.get("id").asText();
UUID id = UUID.fromString(strId);
// search for existing instance or create it
T mObject = ...
// fill/change instance
return (T) defaultDeserializer.deserialize(jp, ctxt, mObject);
}
Создание картографа объекта:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enableDefaultTyping();
objectMapper.registerModule(new Jdk8Module());
objectMapper.registerModule(new JavaTimeModule());
SimpleModule module = new SimpleModule();
module.setDeserializerModifier(new BeanDeserializerModifier() {
@Override
public JsonDeserializer<?> modifyDeserializer(DeserializationConfig config, BeanDescription beanDesc, JsonDeserializer<?> deserializer) {
if (beanDesc.getBeanClass() == Table.class)
return new ModelObjectDeserializer<>(Table.class, (JsonDeserializer<Table>) deserializer);
return deserializer;
}
});
objectMapper.registerModule(module);
Приведенный выше код выполняется без каких-либо ошибок или исключений, но экземпляр из mObject не заполняется defaultDeserializer.deserialize (jp, ctxt, mObject);
Если я не использую свой собственный десериализатор, созданные экземпляры будут заполнены, как и ожидалось.