2014-09-20 2 views
0

Я пытаюсь использовать ModelMapper для отображения следующего json, как описано здесь http://modelmapper.org/user-manual/gson-integration/, но я получаю исключение NullPointerException, и я не могу понять, что не так. Любые советы, пожалуйста?ModelMapper: как сопоставить этот json с Java?

{"a": "aaa", "b": [{"c": "ccc"}]} 

public class Foo { 
    private String a; 
    private ArrayList<Bar> b; 
} 



public class Bar { 
    private String c; 
} 

ModelMapper mapper = new ModelMapper(); 
mapper.getConfiguration().addValueReader(new JsonElementValueReader()); 
JsonElement responseElement = new JsonParser().parse(json); 
Foo foo = mapper.map(responseElement, Foo.class); 
+0

Где вы получаете 'NullPointerException'? –

+0

При публикации вопросов типа «почему я получаю эту ошибку» вам нужно (как минимум) отправить полную трассировку стека и указать, какая строка в вашем коде выбрала исключение. Еще лучше было бы опубликовать [SSCCE] (http://sscce.org/). – azurefrog

+0

Это трассировка стека, которую я получаю: https://gist.github.com/dabd/1b84bab88144ff6bc873#file-gistfile1-txt – dmz73

ответ

1

После обзора того, что вы имели в виду, и вашего комментария в вопросе, это очень вероятно, ошибка в их реализации. Javadoc для ValueReader утверждает

Возвращает все имена членов для исходного объекта, иначе null, если источник не имеет членов.

Однако единственный код, который использует этот метод, PropertyInfoSetResolver#resolveAccessors(...), не проверяет наличие null. Имена пользователей в JSON имеют смысл только для объектов, но здесь у вас есть массив JSON. Вот почему он терпит неудачу.

Насколько я могу судить, код не проверяет для null или для source типов, не имеющих членов. Я считаю это ошибкой. Ошибка легко воспроизводится из примера примера, заменив любое из полей (и соответствующего JSON) на типы массивов. Возможно, вам захочется связаться с разработчиком или сменить библиотеки.

+0

Спасибо. Кажется, это и есть причина. Я заметил это, когда проследил выполнение библиотеки. Надеюсь, автор исправит эту небольшую ошибку. – dmz73