Use peekJson in the DefaultOnDataMismatchAdapter example. (#809)

This commit is contained in:
Eric Cochran 2019-02-15 17:09:50 -08:00 committed by GitHub
parent d843950731
commit a83a9b79e4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -36,17 +36,20 @@ public final class DefaultOnDataMismatchAdapter<T> extends JsonAdapter<T> {
}
@Override public T fromJson(JsonReader reader) throws IOException {
// Read the value first so that the reader will be in a known state even if there's an
// exception. Otherwise it may be awkward to recover: it might be between calls to
// beginObject() and endObject() for example.
Object jsonValue = reader.readJsonValue();
// Use the delegate to convert the JSON value to the target type.
// Use a peeked reader to leave the reader in a known state even if there's an exception.
JsonReader peeked = reader.peekJson();
T result;
try {
return delegate.fromJsonValue(jsonValue);
// Attempt to decode to the target type with the peeked reader.
result = delegate.fromJson(peeked);
} catch (JsonDataException e) {
return defaultValue;
result = defaultValue;
} finally {
peeked.close();
}
// Skip the value back on the reader, no matter the state of the peeked reader.
reader.skipValue();
return result;
}
@Override public void toJson(JsonWriter writer, T value) throws IOException {