码迷,mamicode.com
首页 > 微信 > 详细

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

时间:2019-10-14 10:45:13      阅读:850      评论:0      收藏:0      [点我收藏+]

标签:ted   void   键值对   opera   logs   通过   gets   root   start   

在上次开发的基础上(链接在这里: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:所有文章用于个人学习,仅代表个人理解。

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

标签:ted   void   键值对   opera   logs   通过   gets   root   start   

原文地址:https://www.cnblogs.com/segho/p/11669798.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!