All Downloads are FREE. Search and download functionalities are using the official Maven repository.

weixin.popular.client.BytesOrJsonResponseHandler Maven / Gradle / Ivy

package weixin.popular.client;

import java.io.IOException;

import org.apache.http.Header;
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.entity.ContentType;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import weixin.popular.bean.media.MediaGetResult;
import weixin.popular.util.JsonUtil;

/**
 * 二进制 或 JSON 数据Response处理
 * 
 * @author LiYi
 *
 */
public class BytesOrJsonResponseHandler{

	private static Logger logger = LoggerFactory.getLogger(BytesOrJsonResponseHandler.class);

	public static  ResponseHandler createResponseHandler(final Class clazz){
		return new BytesOrJsonResponseHandlerImpl(null,clazz);
	}

	public static class BytesOrJsonResponseHandlerImpl extends LocalResponseHandler implements ResponseHandler {
		
		private Class clazz;
		
		public BytesOrJsonResponseHandlerImpl(String uriId, Class 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) {
            	ContentType contentType = ContentType.get(response.getEntity());
    			//json data
        		String contentTypeStr = contentType==null?null:contentType.getMimeType();
    			if(contentType != null && 
    				(ContentType.TEXT_PLAIN.getMimeType().equalsIgnoreCase(contentTypeStr)
    				||ContentType.APPLICATION_JSON.getMimeType().equalsIgnoreCase(contentTypeStr))){
    				 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{
    				//bytes data
    				try {
						T t = clazz.newInstance();
						MediaGetResult mediaGetResult = (MediaGetResult)t;
						Header contentDisposition = response.getFirstHeader("Content-disposition");
						if(contentDisposition != null){
							String filename = contentDisposition.getValue().replaceAll(".*filename=\"(.*)\".*", "$1");
							mediaGetResult.setFilename(filename);
						}
						mediaGetResult.setContentType(contentTypeStr);
						mediaGetResult.setBytes(EntityUtils.toByteArray(response.getEntity()));
						logger.info("URI[{}]ContentType:{} elapsed time:{} ms RESPONSE DATA:{}",super.uriId,contentTypeStr,System.currentTimeMillis()-super.startTime,"");
						return t;
					} catch (InstantiationException e) {
						// TODO Auto-generated catch block
						logger.error("", e);
					} catch (IllegalAccessException e) {
						// TODO Auto-generated catch block
						logger.error("", e);
					}
    			}
            } else {
                throw new ClientProtocolException("Unexpected response status: " + status);
            }
            return null;
		}
		
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy