Com.fasterxml.jackson(.databind) v3 имеет проблемы с десериализацией `java.util.Properties` (это работало в v2)JAVA

Программисты JAVA общаются здесь
Anonymous
Com.fasterxml.jackson(.databind) v3 имеет проблемы с десериализацией `java.util.Properties` (это работало в v2)

Сообщение Anonymous »

В моем Java-приложении у меня было требование реализовать «иерархический HashMap», что означает: у меня есть иерархия HashMap (каждый из которых содержит пары имя-значение), которые связаны древовидным образом и ведут себя так, что, если ключ не найден на локальной карте, они проверяют этот ключ в своей «родительской карте» (рекурсивно до корневой карты) и - если они находят его, они предоставляют эту «верхнюю» карту value.
Тогда я решил использовать «java.util.Properties» (или, если быть точным: класс, производный от Properties) для этой цели, поскольку они реализуют именно такую иерархию карт: при создании нового экземпляра Properties вы можете предоставить родительский экземпляр Properties.
Я (де-)сериализую эти свойства в/из JSON, используя метод com.fasterxml.jackson(.databind)-библиотека (

Код: Выделить всё

com.fasterxml.jackson.databind.json.JsonMapper). Это работало без каких-либо проблем с Jackson v2, но теперь я только что обновился до Jackson v3, и в этой версии десериализация свойств не удалась. :-(

При попытке прочитать файлы JSON, созданные в более ранней версии, я постоянно получаю ошибки:
File 'test.kmc' is not a valid configuration (reason: 'com.fasterxml.jackson.databind.JsonMappingException: Problem deserializing property 'properties' (expected type: [map type; class my.application.entities.NodeProperties, [simple type, class java.lang.String] -> [simple type, class java.lang.String]]; actual type: `java.util.Properties`), problem: argument type mismatch at [Source: (BufferedInputStream); line: 8, column: 2] (through reference chain: my.application.entities.nodes.RootNode["properties"])
Примечание: класс NodeProperties — это простой класс, производный от java.util.Properties, например:

Код: Выделить всё

public class NodeProperties extends Properties {
...
}
и просто добавляет несколько дополнительных операций, необходимых мне для моих иерархий пар имя-значение.
Есть идеи, почему десериализация Джексона java.util.Properties завершается неудачно в версии 3.x? Это ожидаемое поведение? Требуется ли теперь для этого какой-то флаг или помощник?

Вернуться в «JAVA»