package org.sana.net.http.handler; import java.io.IOException; import java.lang.reflect.Type; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.ResponseHandler; import org.apache.http.util.EntityUtils; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonSyntaxException; import org.sana.net.Response; import org.sana.net.ResponseException; public abstract class ApiResponseHandler<T> implements ResponseHandler<T>{ final static Gson gson = new GsonBuilder() .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) .setDateFormat("yyyy-MM-dd'T'HH:mm:ss") .create(); public abstract Type getType(); @Override public T handleResponse(HttpResponse response) throws ClientProtocolException, IOException { String json = EntityUtils.toString(response.getEntity()); Type type = getType(); try{ return gson.fromJson(json, type); } catch (JsonSyntaxException e){ throw new ResponseException(json, e); } } public static <K> K fromJson(String json, Type typeOf){ return gson.fromJson(json, typeOf); } }