一.消息体分析
这里说的微信消息体,就是用户与公众号交互后,通过微信服务器传送到开发者服务器的信息。拿普通的文本消息来说,其消息的组成如下:
二.创建对应的DTO
根据图,我们可以得知,消息体由ToUserName、FromUserName、CreateTime、MsgType、Content、MsgId几个部分组成。
由此,我们可以创建一个对应的实体类,包含上述几个属性。
创建对应的DTO的作用是因为,我们可以使用XStream实现xml字符串和DTO之间的转换,这样方便在业务层面的数据传递,还有一种方式,就是使用Dom4j来解析xml,并将其传入一个map中来存储信息,但是这样,每次取值就相对麻烦一点,因此,我建议使用实体类传输。
三.获取消息
当用户与微信交互时,微信服务器将通过POST请求,将数据到开发者服务器上,此时,我们需要通过HttpServletRequest来获取POST请求中的消息体数据,就是从流中获取数据,具体的代码如下:
/**
* 获取POST请求中Body参数
* @param request
* @return 字符串
*/
public static String getRequestBody(HttpServletRequest request) {
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
} catch (IOException e) {
e.printStackTrace();
}
String line = null;
StringBuilder sb = new StringBuilder();
try {
while ((line = br.readLine()) != null) {