【问题标题】:New firebase json annotations新的 firebase json 注释
【发布时间】:2023-04-08 22:37:01
【问题描述】:

我正在为我的实体使用自动值并对其进行注释以允许 json 解析。

新的sdk中有新的注解:ExcludeIgnoreExtraPropertiesThrowOnExtraProperties@PropertyNamehttps://firebase.google.com/docs/reference/android/com/google/firebase/database/PropertyName。但是 sdk 中似乎缺少 PropertyName ..

【问题讨论】:

    标签: android firebase firebase-realtime-database


    【解决方案1】:

    我们错过了此版本的 Firebase SDK for Android 中的 @PropertyName 注释,但不久之后的版本中包含了它。

    有关在任何版本的 Firebase SDK 中显式使用 Jackson 的方法,请参阅此答案:How to deserialise a subclass in Firebase using getValue(Subclass.class)

    【讨论】:

    • 如果我坚持杰克逊的@JsonProperty 注释到那时我会好吗?
    • 是的。一旦我们介绍了该属性,我建议您切换,因为它会显着减小您的 apk 的大小。
    • 我包含了 compile jackson-annotations:2.7.4 和 jackson-databind:2.7.4,但看起来 firebase 忽略了 @JsonProperty@JsonSerialize 注释。
    • 您必须自己使用new ObjectMapper().converValue(pojoValue, Map.class); 将其序列化为Map,然后将该映射传递给setValue()updateChildren()
    • 2020 年 1 月,此问题仍未解决!虽然属性名称包含在 21.3.1 的代码中,但它是错误的,根本不起作用!
    【解决方案2】:
    BEFORE
    @JsonIgnoreExtraProperties(ignoreUnknown=true)
    public class ChatMessage {
       public String name;
       public String message;
       @JsonIgnore
       public String ignoreThisField;
    }
    
    dataSnapshot.getValue(ChatMessage.class)
    AFTER
    public class ChatMessage {
       public String name;
       public String message;
       @Exclude
       public String ignoreThisField;
    }
    
    dataSnapshot.getValue(ChatMessage.class)
    

    参考https://firebase.google.com/support/guides/firebase-android#update_your_java_model_objects_numbered

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 2022-08-03
      • 1970-01-01
      相关资源
      最近更新 更多