Andiord подписал apk: Jackson ObjectMapper возвращает null для объекта, содержащего список

My Rest API возвращает экземпляр следующего объекта в формате строки Json:

public class ObjectWithList implements Serializable {
    private long id;
    private String name;
    private List<String> contacts;
}

Мое приложение для Android пытается десериализовать этот результат, используя следующий код:

ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(jsonResponse, ObjectWithList.class);

В отладочном apk ObjectMapper может успешно десериализовать строку JSON в этот экземпляр объекта, и данные списка не повреждены. Однако в подписанном apk возвращаемый объект содержит пустой список. Даже имя пустое. Исключений из ObjectMapper нет. Почему это не работает? Другие API, которые возвращают любые другие объекты без списка, десериализуются без проблем. Почему объекты, содержащие списки, не работают?

Я проверил много сообщений SO, но не смог найти никаких входных данных для решения этой проблемы. Любые подсказки/указатели приветствуются.

С уважением, Шобхана


person Shobhana Sriram    schedule 02.03.2017    source источник


Ответы (1)


В отладочном apk ObjectMapper может успешно десериализовать строку JSON в этот экземпляр объекта, и данные списка не повреждены. Однако в подписанном apk возвращаемый объект содержит пустой список

Я подозреваю, что вы используете ProGuard, и по умолчанию он отключен для отладочных сборок. Вы можете либо отключить его для подписанных, установив minifyEnabled false в build.gradle, либо исключить определенные классы из ProGuard.

person Marcin Orlowski    schedule 02.03.2017
comment
Большое спасибо, Марчин. Извините за задержку с ответом. Да, я использую ProGuard и предпочитаю оставить его включенным. Поэтому я попробую ваше второе предложение и подтвержу, решит ли эту проблему исключение определенных классов из ProGuard. - person Shobhana Sriram; 21.03.2017
comment
Я исключил из ProGuard необходимые классы gson и классы приложений, которые необходимо десериализовать, и все заработало нормально! Список содержит данные, возвращаемые Rest API. Еще раз спасибо, Марчин! - person Shobhana Sriram; 21.03.2017
comment
Интересно, как другие объекты моего приложения десериализуются без каких-либо проблем? Почему только объекты, содержащие список, показали эту проблему? - person Shobhana Sriram; 21.03.2017