工具类:
package com.wangyin.platarch.pla.common.util;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.swing.text.html.parser.Entity;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
public class HttpClientUtil {
/**
* 发送post请求,获取响应内容
* @param url
* @param obj
* @param requestCls
* @param httpConnectionTimeout
* @param soTimeout
* @return
* @throws Exception
*/
public static String post(String url,Object obj,Class requestCls,int httpConnectionTimeout,int soTimeout) throws Exception{
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, httpConnectionTimeout);
httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, soTimeout);
Map<String, Object> paramMap = EntityUtil.getEntityMap(obj,requestCls);
HttpPost httpost=postForm(url,paramMap);
HttpResponse httpResponse = httpclient.execute(httpost);
String body=paseResponse(httpResponse);
httpclient.getConnectionManager().shutdown();
return body;
}
public static void main(String[] args) {
}
/**
* 获取httpost
* @param url
* @param params
* @return
* @throws Exception
*/
private static HttpPost postForm(String url, Map<String, Object> params) throws Exception{
HttpPost httpost = new HttpPost(url);
List<NameValuePair> nvps = new ArrayList <NameValuePair>();
Set<String> keySet = params.keySet();
for(String key : keySet) {
nvps.add(new BasicNameValuePair(key, params.get(key).toString()));
}
httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
return httpost;
}
/**
* 解析响应信息
* @param response
* @return
* @throws Exception
*/
private static String paseResponse(HttpResponse response) throws Exception {
HttpEntity entity = response.getEntity();
String charset = EntityUtils.getContentCharSet(entity);
String body= EntityUtils.toString(entity);
return body;
}
}
调用方式举例:
@Test
public void testPOST() {
OrderCreateRequest request = new OrderCreateRequest();
request.setAppKey("TPR");
request.setVersion("1.0");
request.setArea("1");
request.setCashier("wallet");
request.setDenomination(80.6f);
request.setIsp(IspTypeEnum.ChinaUnicom.getCode() + "");
request.setMemberId("121313");
request.setMobile("18612136171");
request.setOrderType("300");
request.setSkuId("121312");
request.setUserPin("tob蓝波湾");
String data = null;
try {
data = HttpClientUtil.post("http://localhost:8080/order/create", request, OrderCreateRequest.class, 30000,
30000);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(data);
}
EntityUtil.java
package com.wangyin.platarch.pla.common.util;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
/**
* 实体类操作
* @author litao10
*
*/
public class EntityUtil {
/**
* 反射实体类为key:value
* @param obj
* @param requestCls
* @return
* @throws Exception
*/
public static Map<String, Object> getEntityMap(Object obj,Class requestCls) throws Exception{
Map<String, Object> paramMap=new HashMap<String, Object>();
Method[] methods = requestCls.getMethods();
for(Method method:methods){
if(method.getName().startsWith("get")&&!method.getName().toLowerCase().contains("class")){
//获取方法名,去掉get
String key=getFieldNameByMethodname(method.getName());
Object object = method.invoke(obj, null);
Object value = object!=null?object:"";
paramMap.put(key, value);
}
}
return paramMap;
}
/**
* 根据get方法名获取变量名称
* @param name
* @return
*/
private static String getFieldNameByMethodname(String name) {
StringBuffer sb=new StringBuffer(name.substring(3));
sb.setCharAt(0, Character.toLowerCase(sb.charAt(0)));
return sb.toString();
}
}