public interface WeixinMessageHandler {
/*
* 返回nul时表示不是本处理器处理
*
*/
public String processMsg(WeixinRequest request) throws Exception;
}
<span style="font-family: Arial, Helvetica, sans-serif;">public class SubscribeHandler implements WeixinMessageHandler {</span>
Recommend recommend;
Berecommend berecommend;
RecommendServiceImp service=new RecommendServiceImp();
String msgid="";
@Override
public String processMsg(WeixinRequest request) throws Exception {
System.out.println(match(request));
if (match(request)) {
recommend=new Recommend();
berecommend=new Berecommend();
msgid=request.getEventKey();
int recommendid=Integer.parseInt(msgid.substring(msgid.indexOf("_")+1, msgid.length()));
recommend.setId(recommendid);
berecommend.setAccount(request.getFromUserName());
UserInfo user=WeixinApi.getUserInfo(request.getFromUserName());
berecommend.setRecommendID(recommendid);
berecommend.setNickname(user.getNickname());
service.recommend(recommend, berecommend);
return "";
}
return null;
}
private boolean match(WeixinRequest request){
if ("event".equals(request.getMsgType())&&"subscribe".equals(request.getEvent())) {
return true;
}
return false;
}
public static void main(String[] args) throws Exception {
WeixinRequest WX=new WeixinRequest();
WX.setMsgType("event");
new SubscribeHandler().processMsg(WX);
}
}
使用方法:
通过读取配置文件取得实现了WeixinMessageHandler的类路径名 通过反射机制生成对象放入接口集合内
private List<WeixinMessageHandler> handlerList=new ArrayList<WeixinMessageHandler>();
String handlers=config.getInitParameter("handlers");
if (handlers!=null) {
String handlerarray[]=handlers.split(";");
for (String handler : handlerarray) {
try {
WeixinMessageHandler handle=(WeixinMessageHandler)Class.forName(handler).newInstance();
handlerList.add(handle);
} catch (Exception e) {
e.printStackTrace();
}
for (WeixinMessageHandler handler : handlerList) {
result=handler.processMsg(wxr);
if (result!=null) {
break;//退出循环
}
每次执行foreach循环时 通过调用processMsg方法 通过判断传入的内容是否时该类要处理的 是的话得到返回的数据停止遍历 不是则继续遍历