在微信开发的自动回复消息中,我们无法将我们所能够想到的自动回复内容全部罗列在Java代码中,因此,我们需要使用配置文件来配置我们自动回复的内容,当我们需要添加或者修改自动回复的内容时,只需要在配置文件中进行改动,则可以实现对自动回复内容的修改。
既然提到了在配置文件中配置,我们首先想到的就是xml文件,以下是自动回复的配置文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<weixin>
<!-- 默认回复 -->
<defaultReply value="我看不懂您在说些什么。" />
<!-- 自动回复 -->
<autoReplys>
<autoReply autoKey="签到" reply="您好,您的签到信息已经成功记录。" />
<autoReply autoKey="笑话" reply="系统为您讲了一个有趣的笑话。" />
<autoReply autoKey="难过" reply="究竟是什么让你难过?" />
<autoReply autoKey="我爱你" reply="我也爱你。" />
<autoReply autoKey="再见" reply="goodbye" />
</autoReplys>
</weixin>
配置好如上文件以后,我们就可以去编辑自动回复部分的代码了。
思路如下:
1.通过dom4j解析xml文件,获取根节点,获取相应的回复节点。
2.获取defaultReply内容,并保存在静态变量中。
3.循环获取autoReply内容,保存在List<Map<String,String>>中。
注意:这里的List集合是指定的map泛型,元素map里面的key跟别为为autoKey和reply,value为对应的关键字和所应该回复的内容。
4.获取到用户输入以后,遍历List,查找用户发送的信息content是否包含在map中的key中,如果是,则获取项对应的value,返回给用户。
关键代码送上:
Element defaultReplyEle = rootEle.element("defaultReply");
defaultReply = defaultReplyEle.attributeValue("value");
// 获取自动回复内容
Element autoReplyListEle = rootEle.element("autoReplys");
Iterator autoReplyIterator = autoReplyListEle.elementIterator();
while (autoReplyIterator.hasNext()) {
Element autoReplyElement = (Element) autoReplyIterator.next();
String autoKey = autoReplyElement.attributeValue("autoKey");
String reply = autoReplyElement.attributeValue("reply");
Map<String,String> obj = new HashMap<String,String>();
obj.put("autoKey", autoKey);
obj.put("reply", reply);
autoReplyList.add(obj);
}
/**
* 根据参数返回相应的回复信息
* @param content
* @return
* @throws Exception
*/
private String calcBackStr(String content) throws Exception{
String backStr = NameResourceProperties.getDefaultReply();
if(super.noValue(content)){
return backStr;
}
List<Map<String,String>> autoReplyList = NameResourceProperties.getAutoReplyList();
for(Map<String,String> obj : autoReplyList){
if(content.indexOf(obj.getString("autoKey"))>=0){
backStr = obj.getString("reply");
break;
}
}
return backStr;
}
这样我们就实现了配置文件写入自动回复内容,并读取配置文件获取自动回复。