io.gsonfire.postprocessors.methodinvoker.MethodInvokerPostProcessor Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of gson-fire Show documentation
Show all versions of gson-fire Show documentation
A java library that adds some very useful features to Gson, like Date serializing to unix timestamp or RFC3339, method (getter) serialization, pre and post processors and many more. Check out the documentation to learn how to use it!
package io.gsonfire.postprocessors.methodinvoker;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import io.gsonfire.PostProcessor;
import io.gsonfire.annotations.ExposeMethodResult;
import io.gsonfire.gson.FireExclusionStrategy;
import io.gsonfire.gson.FireExclusionStrategyComposite;
import java.lang.reflect.InvocationTargetException;
/**
* @autor: julio
*/
public final class MethodInvokerPostProcessor implements PostProcessor {
private static MappedMethodInspector methodInspector = new MappedMethodInspector();
private final FireExclusionStrategy serializationExclusionStrategy;
public MethodInvokerPostProcessor() {
this(new FireExclusionStrategyComposite());
}
public MethodInvokerPostProcessor(FireExclusionStrategy serializationExclusionStrategy) {
this.serializationExclusionStrategy = serializationExclusionStrategy;
}
@Override
public void postDeserialize(T result, JsonElement src, Gson gson) {
//nothing here
}
@Override
public void postSerialize(JsonElement result, T src, Gson gson) {
if(result.isJsonObject()){
JsonObject jsonObject = result.getAsJsonObject();
for(MappedMethod m: methodInspector.getAnnotatedMembers(src.getClass(), ExposeMethodResult.class)){
if(!serializationExclusionStrategy.shouldSkipMethod(m)) {
try {
if (m.getConflictResolutionStrategy() == ExposeMethodResult.ConflictResolutionStrategy.OVERWRITE || (m.getConflictResolutionStrategy() == ExposeMethodResult.ConflictResolutionStrategy.SKIP && !jsonObject.has(m.getSerializedName()))) {
Object value = m.getMethod().invoke(src);
jsonObject.add(m.getSerializedName(), gson.toJsonTree(value));
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
}
}