Как игнорировать новые поля для объектной модели с Firebase 1.0.2

Я использую последнюю версию на момент зависимости от Firebase, которая является 1.0.2, и у меня возникают проблемы с правильным анализом моих pojos.

Дело в том, что в любое время схема может быть изменена, но я не хочу, чтобы мое приложение зависало с этим:

D / AndroidRuntime (14097): завершение работы виртуальной машины W/dalvikvm(14097): threadid=1: поток завершается с неперехваченным исключением (group=0x40a451f8) E/AndroidRuntime(14097): неустранимое исключение: основной E/AndroidRuntime(14097): com.firebase.client.FirebaseException: не удалось отскочить для типа E / AndroidRuntime (14097): в com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:213)

Глядя в дерево зависимостей, я понимаю, что Firebase использует Jackson mapper 1.9.7, поэтому аннотация @JsonIgnoreProperties(ignoreUnknown = true") это не вариант. Кроме того, объект сопоставления обернут в этот объект Firebase, поэтому я не могу настроить DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES имущество (DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES для Джексона 1.9 и раньше).

Есть ли способ установить это свойство, как аннотацию на уровне класса или как настроить маппер или любой другой механизм?

Лучшим решением было бы то, что Firebase 1.0.3 начал использовать Jackson 2.0, но не знаю, волнует ли это их сейчас.

Примечание: я уже думал об исключении транзитивной зависимости Jackson 1.9.7 и добавлении Jackson 2.0, чтобы я мог получить доступ к этой функции ignoreUnknown, но я не думаю, что это жизнеспособный выбор, поскольку я буду менять версию мэра.

4 ответа

Решение

Firebase 1.0.3 был выпущен и теперь использует Jackson 2.2.2, поэтому аннотация @JsonIgnore это путь

Редактировать: по состоянию на 2017 год, Firebase больше не использует Джексона. правильная аннотация @Exclude,

Для тех, кто перешел на официальную версию Google Firebase (по состоянию на 29 мая 2016 г.), вы можете использовать @Exclude вместо @JsonIgnore или @JsonProperty. Вот ссылка на их документ.

Пример:

public class dataPacket{
    public String data;
    ...
    @Exclude
    public String getData(){return data;}
}

Обновить:

Как отмечали другие, аннотация @Exclude правильный способ использовать его сейчас. Но если вы используете Kotlin, это не сработает. Для использования Kotlin

@get:Exclude var data: String? = nil
//or
@set:Exclude var data: String? = nil
//or both
@set:Exclude @get:Exclude var data: String? = nil

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

Старый ответ:

Я прихожу в Firebase из GSON, где я использовал временное ключевое слово. И это работает с Firebase тоже

public transient String data;

Как говорится в принятом ответе, Firebase теперь использует Джексона, так что вы можете комментировать нужные методы, которые вы хотите игнорировать

@JsonIgnore

Редактировать:

Firebase изменил все. Woot. Теперь используйте это вместо:

@Exclude

Другие вопросы по тегам