View Javadoc
1   package com.foxinmy.weixin4j.handler;
2   
3   import java.util.Set;
4   
5   import com.foxinmy.weixin4j.request.WeixinMessage;
6   import com.foxinmy.weixin4j.request.WeixinRequest;
7   import com.foxinmy.weixin4j.response.WeixinResponse;
8   import com.foxinmy.weixin4j.util.ClassUtil;
9   
10  /**
11   * 消息适配器:对于特定的消息类型进行适配,如text文本、voice语音消息
12   *
13   * @className MessageHandlerAdapter
14   * @author jinyu(foxinmy@gmail.com)
15   * @date 2015年5月17日
16   * @since JDK 1.6
17   * @see com.foxinmy.weixin4j.request.WeixinMessage
18   */
19  @SuppressWarnings("unchecked")
20  public abstract class MessageHandlerAdapter<M extends WeixinMessage> implements
21  		WeixinMessageHandler {
22  
23  	@Override
24  	public boolean canHandle(WeixinRequest request, WeixinMessage message,
25  			Set<String> nodeNames) {
26  		return message != null
27  				&& message.getClass() == ClassUtil.getGenericType(getClass())
28  				&& canHandle0(request, (M) message);
29  	}
30  
31  	/**
32  	 * 能否处理请求
33  	 *
34  	 * @param request
35  	 *            微信请求
36  	 * @param message
37  	 *            微信消息
38  	 * @return true则执行doHandler0 @
39  	 */
40  	protected boolean canHandle0(WeixinRequest request, M message) {
41  		return true;
42  	}
43  
44  	@Override
45  	public WeixinResponse doHandle(WeixinRequest request, WeixinMessage message) {
46  		return doHandle0((M) message);
47  	}
48  
49  	/**
50  	 * 处理请求
51  	 *
52  	 * @param message
53  	 *            微信消息
54  	 * @return
55  	 */
56  	protected abstract WeixinResponse doHandle0(M message);
57  
58  	/**
59  	 * 缺省值为1,存在多个匹配到的MessageHandler则比较weight大小
60  	 */
61  	@Override
62  	public int weight() {
63  		return 1;
64  	}
65  }