package weixin.popular.client; import java.io.IOException; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.ResponseHandler; import org.apache.http.util.EntityUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import weixin.popular.util.JsonUtil; public class JsonResponseHandler{ private static Logger logger = LoggerFactory.getLogger(JsonResponseHandler.class); public static <T> ResponseHandler<T> createResponseHandler(final Class<T> clazz){ return new JsonResponseHandlerImpl<T>(null,clazz); } public static class JsonResponseHandlerImpl<T> extends LocalResponseHandler implements ResponseHandler<T> { private Class<T> clazz; public JsonResponseHandlerImpl(String uriId, Class<T> clazz) { this.uriId = uriId; this.clazz = clazz; } @Override public T handleResponse(HttpResponse response) throws ClientProtocolException, IOException { int status = response.getStatusLine().getStatusCode(); if (status >= 200 && status < 300) { HttpEntity entity = response.getEntity(); String str = EntityUtils.toString(entity,"utf-8"); logger.info("URI[{}] elapsed time:{} ms RESPONSE DATA:{}",super.uriId,System.currentTimeMillis()-super.startTime,str); return JsonUtil.parseObject(str, clazz); } else { throw new ClientProtocolException("Unexpected response status: " + status); } } } }