2015-06-16 7 views
0

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

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

Эта линия выдает ошибку:

Exception in thread "main" org.codehaus.jackson.map.JsonMappingException: Can not construct instance of scala.collection.immutable.List, problem: abstract types can only be instantiated with additional type inform

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

ответ

2

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

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

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

JavaType type = mapper.getTypeFactory().constructCollectionType(List.class, MyClass.class); 
mapper.readValue(myJson, type); 

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

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