Ошибка при синтаксическом анализе json в класс scala case

В моем веб-приложении spring (mvc) я использую org.codehaus.jackson.map.ObjectMapper в своем коде scala для сопоставления моего json с объектами scala с использованием классов case. Моя строка Json представляет собой массив объектов объектов json. поэтому я использую:

val user = mapper.readValue(myJson, classOf[List[MyClass]])

Эта строка выдает ошибку:

Исключение в потоке «основной» org.codehaus.jackson.map.JsonMappingException: невозможно создать экземпляр scala.collection.immutable.List, проблема: абстрактные типы могут быть созданы только с дополнительной информацией о типе

Правильно ли я использую или есть другой способ?


person mahu    schedule 16.06.2015    source источник


Ответы (1)


Проблема заключается в стирании типа Java. classOf[List[MyClass]] во время выполнения совпадает с classOf[List[_]]. Вот почему Джексон не может знать, какие типы элементов создавать.

К счастью, Джексон поддерживает синтаксический анализ с помощью JavaType, который описывает сами типы.

Вот простой пример на Java:

JavaType type = mapper.getTypeFactory().constructCollectionType(List.class, MyClass.class);
mapper.readValue(myJson, type);
person Gregor Raýman    schedule 16.06.2015