2016-06-21 3 views
1

Моя проблема подобна «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.

Я не уверен, почему Джексон был изменен следующим образом; это похоже на ошибку. Ищите предложения по обходному пути. благодаря!

ответ

1

Попробуйте 2.7.5: возникли некоторые проблемы из-за перезаписи разрешения по типу, и, хотя большинство из них было зафиксировано на 2.7.3, в 2.7.4 был еще один. Так что, по всей вероятности, вы действительно попали в ошибку.

В общем, неплохо попробовать последнюю версию исправления второстепенной версии: у вас нет веской причины использовать 2.7.2 на данный момент, более 2.7.5.

 Смежные вопросы

  • Нет связанных вопросов^_^