2014-01-15 5 views
0

Джексон: десериализация массива объектов, имеющая различный тип ItemsДжексон: десериализация массива объектов, имеющий различный типа деталь

Я превращающий массив объектов в JSON, который работает отлично. Но когда я пытаюсь вернуть массив объектов обратно из json, некоторые элементы теряют свой тип. Например: java.sql.Date объект преобразуется в String.

Пример:

List<Object> list = new ArrayList<Object>(); 

list.add(BigDecimal.ONE); 
list.add(new java.util.Date(System.currentTimeMillis())); 

String text = objectMapper.writeValueAsString(list); 

List<Object> deserializeList = objectMapper.readValue(text , TypeFactory.defaultInstance().constructCollectionType(ArrayList.class, valueType)); 

BigDecimal преобразуется в Integer

Date преобразуется в String

Пожалуйста, помогите мне, чтобы поддерживать тип данных массива объектов без использования класса POJO, мне нужно для возврата многомерного массива объекта с моего сервера на клиент.

ответ

0

Прежде всего, я точно не знаю ваших потребностей и вашего API, но лучший способ исправить вашу проблему - использовать POJO и позволить Jackson справляться с четкими типами данных (а не Object).

Но все в порядке, вы этого не хотите. Что вы можете сделать, так это реализовать пользовательский десериализатор для Jackson (см. http://wiki.fasterxml.com/JacksonHowToCustomDeserializers).

Если вы действительно хотите сохранить коллекцию для сериализации/десериализации, просто создайте новый класс, дочерний элемент списка и создайте для него настраиваемый десериализатор.

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