Tworzymy własną adnotację:
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface Exclude {
}
Klasę implementującą ExclusionStrategy:
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
public class AnnotationExclusionStrategy implements ExclusionStrategy {
@Override
public boolean shouldSkipField(FieldAttributes f) {
return f.getAnnotation(Exclude.class) != null;
}
@Override
public boolean shouldSkipClass(Class clazz) {
return false;
}
}
Wykorzystujemy utworzoną adnotację w POJO:
public abstract class ExampleRequest {
protected Long requestTime;
protected String clientCode;
@Exclude
protected String hash;
}
Budujemy gsona np w taki sposób:
public class TestFacade {
private static final Gson GSON;
static {
JsonDeserializer longToDateAdapter = (json, typeOfT, context) -> new Date(json.getAsJsonPrimitive().getAsLong());
GSON = new GsonBuilder()
.setDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
.registerTypeAdapter(Date.class, longToDateAdapter)
.setExclusionStrategies(new AnnotationExclusionStrategy())
.create();
}
}
Najważniejsza w tym przykładzie jest metoda setExclusionStrategies(new AnnotationExclusionStrategy()) dzięki której cała magia działa.
źródło: http://stackoverflow.com/a/27986860/767529
Brak komentarzy:
Prześlij komentarz