微信公众号开发之解析xml数据包

在上次开发的基础上(链接在这里:https://www.cnblogs.com/segho/p/11654719.html

我们来对用户发送过来的消息进行解析:

需要用到dom4j.jar,自行百度下载资源 我们将xml文件解析文map键值对,

将其直观的反映在console控制台上

WxService中的parseRequest方法代码如下:

 1 public static Map<String, String> parseRequest(InputStream is) {
 2     Map<String,String> map=new HashMap();
 3     SAXReader reader=new SAXReader();
 4     try {
 5         Document document=reader.read(is);
 6         Element root=document.getRootElement();
 7 //root如下:org.dom4j.tree.DefaultElement@46c9c427 [Element: <xml attributes: []/>]
 8         List<Element> elements=root.elements(); 
 9      //elements中的内容包括请求道的xml数据包内容
10         for(Element e:elements) {
11             map.put(e.getName(), e.getStringValue());
12         }
13     } catch (DocumentException e) {
14         // TODO Auto-generated catch block
15         e.printStackTrace();
16     }
17     return map;
18 }
19 }

解析xml数据包我们需要用到SAXReader这个帮助类,所属包为dom4j.jar

/SAXReader中的read方法可以将文件流读取为Document接口类对象 Document是用于文本的容器,用作挥杆文本组件的模型。 该接口的目标是从非常简单的需求(纯文本字段)扩展到复杂的需求(例如,HTML或XML文档)/

我们通过Element定义一个root来获取document.getRootElement中的xml数据(这是root中有所有xml数据包中的内容) 然后通过list集合获取所有xml元素到elements中 通过变量e来get值来获取所有值并将name属性和value属性放入map

由文件流到map对象历程如下:is被SAXReader读取,获得Document对象, 通过Document中document.getRootElementu获取xml数据Element对象element 通过List集合返回文档所有属性对象为elements。 通过便利elements中的属性

weixinServlet代码如下:

 1 package servlet;
 2  3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 import java.util.Map;
 6  7 import javax.servlet.ServletException;
 8 import javax.servlet.ServletInputStream;
 9 import javax.servlet.ServletOutputStream;
10 import javax.servlet.annotation.WebServlet;
11 import javax.servlet.http.HttpServlet;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14 15 import service.WxService;
16 17 /**
18  * Servlet implementation class weixinServlet
19  */
20 @WebServlet("/wx")
21 public class weixinServlet extends HttpServlet {
22     private static final long serialVersionUID = 1L;
23     public weixinServlet() {
24         // TODO Auto-generated constructor stub
25     }
26 27     /**
28      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
29      */
30     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
31     String signature=request.getParameter("signature");
32     String timestamp=request.getParameter("timestamp");
33     String nonce=request.getParameter("nonce");
34     String echostr=request.getParameter("echostr");
35     
36     if(WxService.check(timestamp,nonce,signature)) {
37         System.out.println("connect success");  
38         PrintWriter out=response.getWriter();
39         out.print(echostr);
40         out.flush();
41         out.close();
42         }
43     else 
44     {
45         System.out.println("connect fail");
46     }
47     }
48     /**
49      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
50      */
51     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
52    Map<String,String>requestMap=WxService.parseRequest(request.getInputStream());
53     System.out.println(requestMap);
54     }   
55 }

本人也是初次进行微信的java开发,分享一些我正在看的资料希望能帮到想要学习微信开发的小伙伴们

罗召勇java开发:https://www.bilibili.com/video/av35042298

微信开发帮助文档:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html

微信公众号测试号申请入口:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

ps:所有文章用于个人学习,仅代表个人理解。

猜你喜欢

转载自www.cnblogs.com/segho/p/11669798.html