您的位置 首页 java

java使用springMVC开发微信公众号文本消息类的设计

上一节中,我们讲到微信信息的收发,并对之前的服务器开发者URL的验证地址的代码做了一个修改,让我们的springMVC项目可以同时验证微信开发者的URL,也可以接收消息的进入,上一节中,我只是简单的把消息收到后,然后直接就返回文本消息,代码的可阅读性不够,那么,我们今天要把消息的内容,也要封装成一个类,增强可读性。如果对我的文章感兴趣,欢迎订阅我的头条号,一点热,www.yeehot.com

上一节快速入口

java使用springMVC开发微信公众号文本消息类的设计java使用springMVC开发微信公众号的消息收发功能

那么我们开始设计我们的类

从微信的文档,我们可以看到,微信消息包含了 文本消息、 图片消息、 语音消息、 视频消息、 小视频消息、 地理位置消息、 链接消息还有事件推送消息,那么我们直接提取公共的参数,做一个基类BaseMessage,由于我在上级章节中,使用了map来存放接收的数据,同时也使用Map来对数据进行CDATA来拼接XML的字符串数据输出,那么我们这个基类也使用Map集合来做构造函数和转换方法。我们将 ToUserName接收方帐号(收到的OpenID), FromUserName开发者微信号, CreateTime是消息创建时间 ,MsgType消息类型,MsgId消息ID放在基类。

MsgType是text

package com.yeehot.model;

import java.util.HashMap;

import java.util.Map;

/**

* Created by yeehot.com on 16/7/30.

*/

public class BaseMessage {

protected String ToUserName;

protected String FromUserName;

protected String CreateTime;

protected String MsgType;

protected String MsgId;

public String getToUserName() {

return ToUserName;

}

public void setToUserName(String toUserName) {

ToUserName = toUserName;

}

public String getCreateTime() {

return CreateTime;

}

public void setCreateTime(String createTime) {

CreateTime = createTime;

}

public String getFromUserName() {

return FromUserName;

}

public void setFromUserName(String fromUserName) {

FromUserName = fromUserName;

}

public String getMsgType() {

return MsgType;

}

public void setMsgType(String msgType) {

MsgType = msgType;

}

public String getMsgId() {

return MsgId;

}

public void setMsgId(String msgId) {

MsgId = msgId;

}

public BaseMessage() {

}

public BaseMessage(String toUserName, String fromUserName, String createTime, String msgType, String msgId) {

ToUserName = toUserName;

FromUserName = fromUserName;

CreateTime = createTime;

MsgType = msgType;

MsgId = msgId;

}

//写一个参数为Map的构造函数

public BaseMessage(Map<String ,String> info) {

this.CreateTime=info.get(“CreateTime”);

this.MsgId=info.get(“MsgId”);

this.MsgType=info.get(“MsgType”);

this.FromUserName=info.get(“FromUserName”);

this.ToUserName=info.get(“ToUserName”);

}

//将类的属性输出为Map

public Map<String,String> MessageToMap(){

Map<String,String> map=new HashMap<String, String>();

map.put(“FromUserName”,this.getFromUserName());

map.put(“ToUserName”,this.getToUserName());

map.put(“CreateTime”,this.getCreateTime());

map.put(“MsgType”,this.getMsgType());

map.put(“MsgId”,this.getMsgId());

return map;

}

}

做好了基类,我们可以定义一个文本消息类,它继承基本basemessage.它里面的属性就多一个消息的内容,我们定义为Content。

/**

* Created by yeehot.com on 16/7/30.

*/

public class YhTextMessage extends BaseMessage{

private String Content;

public String getContent() {

return Content;

}

public void setContent(String content) {

Content = content;

}

public YhTextMessage() {

super();

}

public YhTextMessage(String toUserName, String fromUserName, String createTime, String msgType, String msgId, String content) {

super(toUserName, fromUserName, createTime, msgType, msgId);

Content = content;

}

public YhTextMessage(Map<String ,String> info) {

super(info);

this.Content=info.get(“Content”);

}

public Map<String,String> MessageToMap(){

Map<String,String> map=new HashMap<String, String>();

map.put(“Content”,this.Content);

Map<String,String> map2=super.MessageToMap();

if (map!=null){

map.putAll(map2);

}

return map;

}

}

接着我们对我们原来的controller进行修改,这里主要是实现,用户发送消息后,我们程序根据当前用户名,自动回复一段内容给发送者。然后这里主要是将消息变成我们的类。

@ResponseBody

@RequestMapping(value = “/wx/developer”, produces = “text/plain;charset=utf-8”)

public String index(HttpServletRequest request) {

//

String method=request.getMethod();

System.out.print(method+”?”);

if (method.equals(“GET”)) {

//此处省略了验证token的步骤

else {

Map<String,String> postmessage=new HashMap<String, String>();

Map<String,String> responsemessage=new HashMap<String, String>();

StringBuffer jb = new StringBuffer();

String line = null;

BufferedReader reader = null;

try {

reader = request.getReader();

while ((line = reader.readLine()) != null)

{

jb.append(line);

}

postmessage=XmlParseTool.doXMLParse(jb.toString());

YhTextMessage RecivetextMessage=new YhTextMessage(postmessage);

System.out.print(“helo,”+RecivetextMessage.getContent()+RecivetextMessage.getToUserName());

YhTextMessage sendMessage=new YhTextMessage();

sendMessage.setContent(“你好,www.yeehot.com”);

sendMessage.setToUserName(RecivetextMessage.getFromUserName());

sendMessage.setMsgType(RecivetextMessage.getMsgType());

sendMessage.setMsgId(System.currentTimeMillis()+”10″);

sendMessage.setFromUserName(RecivetextMessage.getToUserName());

responsemessage=sendMessage.MessageToMap();

return XmlParseTool.RequestXml2String(responsemessage,true);

}

catch (JDOMException e) {

e.printStackTrace();

}

catch (IOException e) {

e.printStackTrace();

}

return “success”;

}

}

最后我们在公众号测试一下,我们随便输入我们的内容,发现返回的数据,就是我们在代码输入的内容。 结果正确,不过这里要注意的是,我的文本消息而不是链接消息。

今天就讲到这里,欢迎继续关注我的头条号:一点热,如果有什么问题,欢迎留言咨询,我看到之后会第一时间回复大家的。,也欢迎收藏与转发,如果需要转载到其他网站,请与我联系。

文章来源:智云一二三科技

文章标题:java使用springMVC开发微信公众号文本消息类的设计

文章地址:https://www.zhihuclub.com/182438.shtml

关于作者: 智云科技

热门文章

网站地图