最近需要用到许多在后台发送http请求的功能,可能需要发送json和xml类型的数据。
就抽取出来写了一个帮助类:
首先判断发送的数据类型是json还是xml:
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
/**
* 判断是否是json结构
*/
public static boolean isJson(String value) {
try {
JSONObject.parseObject(value);
} catch (JSONException e) {
return false;
}
return true;
} /**
* 判断是否是xml结构
*/
public static boolean isXML(String value) {
try {
DocumentHelper.parseText(value);
} catch (DocumentException e) {
return false;
}
return true;
}
判断之后就设置对应的属性,然后执行post方法:
import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils; private static int connectionTimeout = 1000;// 连接超时时间,毫秒
private static int soTimeout = 30000;// 读取数据超时时间,毫秒
/** HttpClient对象 */
private static CloseableHttpClient httpclient = HttpClients.
custom().disableAutomaticRetries().build();
/*** 超时设置 ****/
private static RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(soTimeout)
.setConnectTimeout(connectionTimeout)
.build();//设置请求和传输超时时间 /**
* 根据给定的URL地址和参数字符串,以post方法调用,如果成功返回true,如果失败返回false
*
* @param url String url地址,不含参数
* @param param Map<String, Object> 参数字表单
* @return boolean true-成功,false失败,如果返回成功可以getStrGetResponseBody()
* 获取返回内容字符串,如果失败,则可访问getErrorInfo()获取错误提示。
*/
public String executePostMethod(String strURL, String param) {
System.out.println("step into executePostMethod");
String strResult = "";
HttpPost post = new HttpPost(strURL);
post.setConfig(requestConfig);
StringEntity entity; try {
System.out.println("step into try"); if(isJson(param)){
System.out.println("it is json");
entity = new StringEntity(param,"utf-8"); // 解决中文乱码问题
entity.setContentEncoding("UTF-8");
entity.setContentType("application/json");
post.setEntity(entity);
}else if(isXML(param)){
System.out.println("it is xml");
entity = new StringEntity(param,"utf-8"); // 解决中文乱码问题
entity.setContentEncoding("UTF-8");
entity.setContentType("text/xml");
post.setEntity(entity);
}else{
entity = new StringEntity(param,"utf-8"); // 解决中文乱码问题
entity.setContentEncoding("UTF-8");
entity.setContentType("application/x-www-form-urlencoded");
post.setEntity(entity);
} //发起请求
HttpResponse httpResponse = httpclient.execute(post);
// 请求结束,返回结果
strResult = EntityUtils.toString(httpResponse.getEntity());
System.out.println(strResult);
} catch (Exception e) {
e.printStackTrace();
}
return strResult;
}
另附上map转为xml和json的方法:
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import com.alibaba.fastjson.JSONObject;
/**
* 将map转换为xml
* @param map
*/
private static String convertMap2Xml(Map<String,String> map) {
Set<Entry<String,String>> entrys = map.entrySet();
Iterator<Entry<String,String>> iter = entrys.iterator();
Document doc = DocumentHelper.createDocument();
Element root = DocumentHelper.createElement("xml");
while(iter.hasNext()) {
Entry<String,String> entry = iter.next();
Element key = DocumentHelper.createElement(entry.getKey());
key.addCDATA(entry.getValue());
root.add(key);
}
doc.add(root);
return doc.asXML();
} /**
* 将map转换为json
* @param map
*/
private static String convertMap2Json(Map<String,String> map) {
JSONObject json = JSONObject.parseObject(map.toString());
return json.toString();
}
http接受json格式的数据
public String getJsonData(HttpServletRequest request) {
System.out.println(request.getCharacterEncoding());
BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(),"utf-8"));
String line = null;
StringBuilder sb = new StringBuilder();
while((line = br.readLine())!=null){
sb.append(line);
}
return sb.toString();
}