package knorxx.framework.generator.web.server.json; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonElement; import com.google.gson.JsonPrimitive; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import java.lang.reflect.Type; import org.joda.time.DateTime; import org.joda.time.format.ISODateTimeFormat; /** * Base class for a Gson implementation of JsonHelper. Custom type adapters can be added by subclassing this * class. Only a converter for DateTime is registerd by default. * * @author sj */ public class GsonHelper implements JsonHelper { private final Gson gson; public GsonHelper(GsonBuilder gsonBuilder) { gsonBuilder.registerTypeAdapter(DateTime.class, new JsonSerializer<DateTime>() { @Override public JsonElement serialize(DateTime src, Type typeOfSrc, JsonSerializationContext context) { return new JsonPrimitive(ISODateTimeFormat.dateTime().print(src)); } }); gson = gsonBuilder.create(); } public GsonHelper() { this(new GsonBuilder()); } @Override public <T> T fromJson(Object element, Class<T> type) { if(element instanceof JsonElement) { return gson.fromJson((JsonElement)element, type); } else { return fromJson(element.toString(), type); } } @Override public <T> T fromJson(String json, Class<T> type) { return gson.fromJson(json, type); } @Override public String toJson(Object data, Class<?> type) { return gson.toJson(data, type); } @Override public String toJson(Object data) { return gson.toJson(data); } @Override public String toJson(CustomJsonSerializer customJsonSerializer) { return customJsonSerializer.toJson(); } }