XML ,JSON ,JAVA转换
消息格式:
1.用户通过微信app发送消息,微信服务器会将接收到的该信息转发到开发者配置的url上,该信息是XML格式
2.开发者处理业务逻辑后,需要向用户发送消息,当然,不是直接发送给用户,而是先发送给微信服务器,然后由微信服务器转发给用户,而该消息格式也是XML
3.开发者调用部分接口时,也需要向微信服务器post部分数据,格式为json
4.微信服务器也会返回json格式的数据
所以XML,JSON与java之间的相互转换十分必要。
xml-》java 解析xml存入map中
public static Map<String, String> praseXml(HttpServletRequest request)
throws Exception {
// 将解析结果存入hashmap中
Map<String, String> map = new HashMap<String, String>();
// 获取输入流
InputStream inputStream = request.getInputStream();
// 读取输入流
SAXReader reader = new SAXReader();
// 获取XML的根节点
Document document = reader.read(inputStream);
Element root = document.getRootElement();
@SuppressWarnings("unchecked")
// 获取所有节点
List<Element> els = root.elements();
// 遍历并存入MAP
for (Element element : els) {
map.put(element.getName(), element.getText());
}
return map;
}
java-》xml 使用xstream-1.3.jar
/**
* 将图文消息对象转换成xml
*
* @param newsMessage
* @return xml 字符串
*/
public static String NewsMessageToXml(NewsMessage newsMessage) {
xstream.alias("xml", NewsMessage.class);
xstream.alias("item", Item.class);
return xstream.toXML(newsMessage);
}
private static XStream xstream = new XStream(new XppDriver() {
public HierarchicalStreamWriter createWriter(Writer out) {
return new PrettyPrintWriter(out) {
// 对所有xml节点的转换都增加CDATA标志
boolean cdata = true;
public void startNode(String name,
@SuppressWarnings("rawtypes") Class clazz) {
super.startNode(name, clazz);
}
protected void writeText(QuickWriter writer, String text) {
if (cdata) {
writer.write("<![CDATA[");
writer.write(text);
writer.write("]]>");
} else {
writer.write(text);
}
}
};
}
});
java->json 使用JSONObject.fromobejctb 导入包json-lib
public static JSONObject httpRequest(String requestUrl,
String requestMethod, String outputStr) {
JSONObject jsonObject = null;
StringBuffer buffer = new StringBuffer();
try {
TrustManager[] tm = { new WXTrustManager() };
SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
sslContext.init(null, tm, new java.security.SecureRandom());
SSLSocketFactory ssf = sslContext.getSocketFactory();
URL url = new URL(requestUrl);
HttpsURLConnection httpUrlConn = (HttpsURLConnection) url
.openConnection();
httpUrlConn.setSSLSocketFactory(ssf);
httpUrlConn.setDoOutput(true);
httpUrlConn.setDoInput(true);
httpUrlConn.setUseCaches(false);
// 设置请求方式
httpUrlConn.setRequestMethod(requestMethod);
if ("GET".equalsIgnoreCase(requestMethod)) {
httpUrlConn.connect();
}
// 当有数据需要提交时
if (null != outputStr) {
OutputStream outputStream = httpUrlConn.getOutputStream();
// 编码格式问题,防止中文乱码
outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
}
// 将返回的输入刘转换成字符串
InputStream inputStream = httpUrlConn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(
inputStream, "UTF-8");
BufferedReader bufferedReader = new BufferedReader(
inputStreamReader);
String str = "";
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
bufferedReader.close();
inputStreamReader.close();
// 释放资源
inputStream.close();
httpUrlConn.disconnect();
jsonObject = JSONObject.fromObject(buffer.toString());
} catch (ConnectException ce) {
log.error("wenxin server connection time out...");
} catch (Exception e) {
log.error("https request error:{}", e);
}
return jsonObject;
}