接收用户发送的消息
根据腾讯的开发者文档,一共有6种回复类型
1 回复文本消息
2 回复图片消息
3 回复语音消息
4 回复视频消息
5 回复音乐消息
6 回复图文消息
后台需要根据回复类型来创建java对象(类)
用户传到后台的数据类型为xml数据包,如果要使用数据包,则需要安装Dom4j161.zip依赖包,来将xml数据包转换成java对象
/**
* 解析XML数据包
* @param is
* @return
*/
public static Map<String, String> parseRequest(InputStream is) {
Map<String,String> map = new HashMap<>();
SAXReader reader = new SAXReader();
try {
//读取输入流,获取文档对象
Document document = reader.read(is);
//根据文档对象获取节点
Element root = document.getRootElement();
//获取根节点的所有子节点
List<Element> elements = root.elements();
for (Element e:elements){
map.put(e.getName(),e.getStringValue());
}
} catch (DocumentException e) {
e.printStackTrace();
}
return map;
}
后台回复用户消息
后台回复消息时,需要将java对象转换成xml数据包,可使用xstream依赖包进行数据转换。转换的数据有两个注意点:
1.根标签应该为<xml>(默认为项目全路径)
2.子标签首字母应该应该为大写(默认小写)
错误实例:
<cn.itcast.web.entity.TextMessage>
<toUserName>to</toUserName>
<fromUserName>from</fromUserName>
<createTime>1615289327</createTime>
<msgType>text</msgType>
<context>aaa</context>
</cn.itcast.web.entity.TextMessage>
解决方法:
1.使用xstream的注解解决
2.定义变量时直接定义成大写
XStream xStream = new XStream();
//此处标记使用了注解的类
xStream.processAnnotations(TextMessage.class);
String xml = xStream.toXML(tm);
//此处注解用来表明根标签为<xml>
@XStreamAlias("xml")
public class TextMessage extends BaseMessage {
//此处注解用来使子标签大写
@XStreamAlias("Context")
private String context;
}
成功实例:
<xml>
<ToUserName>to</ToUserName>
<FromUserName>from</FromUserName>
<CreateTime>1615289647</CreateTime>
<MsgType>text</MsgType>
<Context>aaa</Context>
</xml>
完整的项目