最近工作需要,对接支付。发现较老的支付公司还在用xml传数据,网上搜了很多也没有发现相关的东西。于是自己写了一个
附带http请求。
所需maven依赖
dom4j
dom4j
1.6.1
org.apache.commons
commons-lang3
3.8.1
可以根据自己所需要的部分来筛选maven文件
package com.mtong.biz.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URI;
import java.util.*;
import com.alibaba.fastjson.JSONObject;
import com.mtong.exception.BusinessException;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.NameValuePair;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
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.DefaultHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author [email protected]
* @create 2019-03-05 13:59
*/
public class HttpUtils {
/**
* logger
*/
private static final Logger LOG = LoggerFactory.getLogger(HttpUtils.class);
/**
* get请求
*
* @return
*/
public static String doGet(String url) {
try {
HttpClient client = new DefaultHttpClient();
//发送get请求
HttpGet request = new HttpGet(url);
HttpResponse response = client.execute(request);
/**请求发送成功,并得到响应**/
if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
/**读取服务器返回过来的json字符串数据**/
String strResult = EntityUtils.toString(response.getEntity());
return strResult;
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
/**
* get 请求 key-value 形式
* @author [email protected]
* @param url
* @param param
*/
public static JSONObject doGet(String url, Map param) {
String params = queryParams(param);
return JSONObject.parseObject(doGet(url + "?" + params));
}
/**
* post请求(用于key-value格式的参数)
*
* @param url
* @param params
* @return
*/
public static String doPost(String url, Map params) {
BufferedReader in;
try {
// 定义HttpClient
HttpClient client = new DefaultHttpClient();
// 实例化HTTP方法
HttpPost request = new HttpPost();
request.setURI(new URI(url));
//设置参数
List nvps = new ArrayList<>();
for (Iterator iter = params.keySet().iterator(); iter.hasNext(); ) {
String name = (String) iter.next();
String value = String.valueOf(params.get(name));
nvps.add(new BasicNameValuePair(name, value));
}
request.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));
HttpResponse response = client.execute(request);
int code = response.getStatusLine().getStatusCode();
if (code == 200) { //请求成功
in = new BufferedReader(new InputStreamReader(response.getEntity()
.getContent(), "utf-8"));
StringBuffer sb = new StringBuffer();
String line;
String NL = System.getProperty("line.separator");
while ((line = in.readLine()) != null) {
sb.append(line + NL);
}
in.close();
return sb.toString();
} else { //
LOG.info("请求状态码为: >>>" + code);
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* post请求(用于请求json格式的参数)
*
* @param url
* @param params
* @return
*/
public static String doPost(String url, String params) throws Exception {
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);// 创建httpPost
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-Type", "application/json");
String charSet = "UTF-8";
StringEntity entity = new StringEntity(params, charSet);
httpPost.setEntity(entity);
CloseableHttpResponse response = null;
try {
response = httpclient.execute(httpPost);
StatusLine status = response.getStatusLine();
int state = status.getStatusCode();
if (state == HttpStatus.SC_OK) {
HttpEntity responseEntity = response.getEntity();
String jsonString = EntityUtils.toString(responseEntity);
return jsonString;
} else {
LOG.error("请求返回:" + state + "(" + url + ")");
}
} finally {
if (response != null) {
try {
response.close();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
httpclient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
/**
* 把Map对象转换成请求方式
* @param params
* @author [email protected]
*/
public static String queryParams(Map params) {
String result = "";
if (params != null) {
boolean first = true;
for (String param : params.keySet()) {
if (first) {
first = false;
} else {
result += '&';
}
String value = params.get(param) + "";
result += param + '=';
result += value;
}
}
return result;
}
/**
* xml string convert to mao object
* @param str
*/
public static Map xmlFormatStringToMap(String str) {
if (!StringUtils.isEmpty(str)) {
try {
Element root = DocumentHelper.parseText(str).getRootElement();
// 获取所有子节点
List elements = root.elements();
Map result = null;
for (Element element : elements) {
// 第一次进入初始化
if (result == null){
result = new HashMap<>();
}
result.put(element.getName(), element.getText());
}
return result;
} catch (DocumentException e) {
LOG.error("Xml转换异常 >>> 被转换字符串 >>> " + str);
throw new BusinessException("Xml转换异常");
}
} else {
return new HashMap<>();
}
}
/**
* Map convert Xml string
* @param params
* @author [email protected]
*/
public static String mapToXmlFormatString(Map params) {
// add xml head
String head = "";
return head + convert(params);
}
/**
* 转换
* @author [email protected]
* @param map
*/
private static String convert(Map map) {
// 值类型
// 最后结果标签
StringBuffer buffer = new StringBuffer();
for (String key : map.keySet()) {
// 拼接xml 开头标签
buffer.append("<" + key + ">");
// 判断value值是否为HashMap类型
if (map.get(key) instanceof Map) {
String element = convert((Map) map.get(key));
buffer.append(element);
} else {
buffer.append(map.get(key));
}
// 收尾标签
buffer.append("" + key + ">");
}
return buffer.toString();
}
}
本篇文章作为个人记录 如有发现不足之处。可以指出。 谢谢!