微信用xml来进行消息的传递,所以需要在获取到HttpServletRequest对象之后,进行xml解析。还需要在处理完毕之后,将返回的信息组装成xml文件返回给客户端。编码格式必须为
utf-8
xml文件解析
public static Map<String,String> paresXML(HttpServletRequest request){
//创建map集合存储解析的数据
Map<String,String> map = new HashMap<>();
//从request对象中获取输入流
InputStream in = request.getInputStream();
//读取输入流
SAXReader sax = new SAXReader();
//创建Document元素 因为微信公众号是以xml进行信息传递
Document doc = sax.read(in);
//获取根元素
Element root = doc.getRootElement();
//得到根元素的所有子节点
List<Element> elements = root.elements();
for(Element ele : elements){
map.put(ele.getName(),ele.getText());
}
//关闭流
in.close();
return map;
}
xml文件封装
xml文件封装最原始的做法是根据类对象进行参数的遍历和拼装,可以使用dom4j。
现在可以直接使用
com.thoughtworks.xstream.XStream类进行组织。
因为使用xml传递数据所以要防止在返回数据中包含“>”“<”之类的内容,所以需要
private static XStream xstream = new XStream(
new XppDriver(){
public HierarchicalStream createWriter(Writer out){
//需要对所有内容进行标记
boolean cdata = true;
public void startNode(String name,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);
}
}
};
}
);
然后在封装xml的时候,直接
xstream.alias(“xml”,obj.class);
String responseXml = xstream.toXML(obj);