Reputation: 1325
I'm using the last version at the moment of Firebase dependency, which is 1.0.2 and I'm having problems into getting my pojos parsed correctly.
The thing is, at any time the schema can changed but I don't want my app to crash with this:
D/AndroidRuntime(14097): Shutting down VM W/dalvikvm(14097): threadid=1: thread exiting with uncaught exception (group=0x40a451f8) E/AndroidRuntime(14097): FATAL EXCEPTION: main E/AndroidRuntime(14097): com.firebase.client.FirebaseException: Failed to bounce to type E/AndroidRuntime(14097): at com.firebase.client.DataSnapshot.getValue(DataSnapshot.java:213)
Looking into the dependency tree I get that Firebase is using Jackson mapper 1.9.7, so the annotation @JsonIgnoreProperties(ignoreUnknown = true")
is not an option. Moreover, the object mapper is wrapped into this Firebase object so I can't configure the DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES
property (DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES
for Jackson 1.9 and before).
Is there any way to set this property, either as a class-level annotation or configuring the mapper or any other mechanism whatsoever?
The best solution would be that Firebase 1.0.3 started using Jackson 2.0, but don't know if this is something they care about right now.
Note: I've already thought about excluding the transitive Jackson 1.9.7 dependency and adding Jackson 2.0 so that I can access to this ignoreUnknown feature, but I don't think it is a viable choice since I would be changing the mayor version.
Upvotes: 22
Views: 22307
Reputation: 11175
Update:
As others pointed, annotation @Exclude
is right way to use it now. But if you use Kotlin that won't work. For Kotlin use
@Exclude @JvmField
var data: String? = nil
//or
@set:Exclude @get:Exclude
var data: String? = nil
Because annotation can be applied only for generated fields and not to properties.
Old answer:
I'm coming to Firebase from GSON were I used transient keyword. And that works with Firebase too
public transient String data;
Upvotes: 36
Reputation: 1325
Firebase 1.0.3 was released and now uses Jackson 2.2.2, so annotation @JsonIgnore
is the way to go.
Edit:
as of now in 2017, Firebase doesn't use Jackson anymore. the correct annotation is @Exclude
.
Upvotes: 8
Reputation: 33876
As the accepted answer states, Firebase now uses Jackson, so you can annotate the desired methods you wish to ignore with
@JsonIgnore
Firebase changed everything. Woot. Now use this instead:
@Exclude
Upvotes: 15
Reputation: 801
For those who have moved over to Google's official version of Firebase (As of May 29, 2016), you can use @Exclude instead of @JsonIgnore or @JsonProperty. Here is the link to their document.
Example:
public class dataPacket{
public String data;
...
@Exclude
public String getData(){return data;}
}
Upvotes: 48