还是map的参数比较好set一点。所以我通过把传入的map参数转为xml再发送请求
请求封装:
public static Map HttpRequest(String urlStr , Map<String,String> map) {
String xmlInfo = UnionPayKit.mapToXml(map);
System.out.println("请求xml:\n" + xmlInfo + "\n");
URL url = null;
StringBuffer sb = new StringBuffer();
try {
url = new URL(urlStr);
URLConnection conn = null;
conn = url.openConnection();
conn.setUseCaches(false);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Content-Length", Integer.toString(xmlInfo.length()));
conn.setRequestProperty("Content-Type", "text/xml; charset=utf-8");
OutputStream ops = conn.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(ops, "utf-8");
osw.write(xmlInfo);
osw.flush();
osw.close();
//发送成功后,获取服务器的响应xml串:
String line = "";
InputStream is = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is,"utf-8"));//三层包装
while ((line = br.readLine()) != null) {
sb.append(line + "\r\n");
}
System.out.println("请求响应:\n"+sb.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return UnionPayKit.xmlStrToMap(sb.toString());
}
mapToXml封装:
/**
* map转xml
*/
public static String mapToXml(Map<String, String> data){
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = null;
String output = "";
try {
documentBuilder = documentBuilderFactory.newDocumentBuilder();
org.w3c.dom.Document document = documentBuilder.newDocument();
org.w3c.dom.Element root = document.createElement("xml");
document.appendChild(root);
for (String key : data.keySet()) {
String value = data.get(key);
if (value == null) {
value = "";
}
value = value.trim();
org.w3c.dom.Element filed = document.createElement(key);
filed.appendChild(document.createTextNode(value));
root.appendChild(filed);
}
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer = tf.newTransformer();
DOMSource source = new DOMSource(document);
transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
transformer.setOutputProperty(OutputKeys.VERSION, "1.0");
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
StringWriter writer = new StringWriter();
StreamResult result = new StreamResult(writer);
transformer.transform(source, result);
output = writer.getBuffer().toString(); //.replaceAll("\n|\r", "");
writer.close();
} catch (Exception e) {
e.printStackTrace();
}
return output;
}