Моя проблема подобна «Jackson and generic type reference», но с добавленной морщинкой, что мой общий класс является абстрактным, поэтому я должен сопоставить его конкретному типу. это хорошо работало под Jackson v2.5.3, но недавние изменения в Jackson (v2.7.2 или ранее) нарушили его.Jackson снимает привязки типов при сопоставлении абстрактного типа с конкретным типом
У меня есть абстрактный класс Страница и конкретный класс PageImpl. Я использовал, чтобы иметь возможность десериализации страницы в PageImpl, не проблемы:
SimpleModule module = new SimpleModule().addAbstractTypeMapping(Page.class, PageImpl.class)
ObjectMapper objectMapper = new ObjectMapper().registerModule(module);
, но теперь, я узнал, с помощью отладки источника, что, когда Джексон отображает абстрактный тип к конкретному типу, он падает привязки типа. это означает, что, если я скажу Джексон Дезеро данной JSON строки в типе страницу < XYZ> ...
value = objectMapper.readValue(json,
typeFactory.constructSimpleType(Page.class,
new JavaType[]{typeFactory.constructSimpleType(XYZ.class, null)}));
... что он будет отображать тип вывода на PageImpl, но он падает привязки типа перед тем десериализация JSON в PageImpl. это приводит к PageImpl POJO, содержащему список объектов LinkedHashMap, вместо списка объектов XYZ.
Я не уверен, почему Джексон был изменен следующим образом; это похоже на ошибку. Ищите предложения по обходному пути. благодаря!