com.google.gson.interceptors.InterceptorFactory Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gson-extras Show documentation
Show all versions of gson-extras Show documentation
Extra goodies for Gson, available on Google's Github repository, made available on Central.
package com.google.gson.interceptors;
import com.google.gson.Gson;
import com.google.gson.TypeAdapter;
import com.google.gson.TypeAdapterFactory;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import java.io.IOException;
/**
* A type adapter factory that implements {@code @Intercept}.
*/
public final class InterceptorFactory implements TypeAdapterFactory {
public TypeAdapter create(Gson gson, TypeToken type) {
Intercept intercept = type.getRawType().getAnnotation(Intercept.class);
if (intercept == null) {
return null;
}
TypeAdapter delegate = gson.getDelegateAdapter(this, type);
return new InterceptorAdapter(delegate, intercept);
}
static class InterceptorAdapter extends TypeAdapter {
private final TypeAdapter delegate;
private final JsonPostDeserializer postDeserializer;
@SuppressWarnings("unchecked") // ?
public InterceptorAdapter(TypeAdapter delegate, Intercept intercept) {
try {
this.delegate = delegate;
this.postDeserializer = intercept.postDeserialize().newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override public void write(JsonWriter out, T value) throws IOException {
delegate.write(out, value);
}
@Override public T read(JsonReader in) throws IOException {
T result = delegate.read(in);
postDeserializer.postDeserialize(result);
return result;
}
}
}