wechat4j对于不需要处理的消息类型的处理
wechat4j对微信公众平台的api文档时行了一系列的封装(Java SDK),只需调用方法就能实现对其方法的使用,项目地址为:wechat4j项目地址
但是它将所有的类型都进行了重写,而对于不需要处理的消息类型,都有进行回复。而目前项目中只用到了自定义菜单的消息类型,而对于其它类型,wechat4j默认使用了文本类型进行回复,不符合我的需求。而微信官方规定,如果不需要处理,那么可以回复空串(空字符串指的是xml为“”,而不是文本内容为空)
因此,我是这样处理的,如果大家有更好的办法,欢迎一起交流。
wechat4j接收到消息后,它首先会解析接收的消息内容,然后根去消息类型进行不同消息类型的处理。然后再对消息进行响应,回复发送者的消息
如图:
1.在WechatSupport中定义一个变量
protected static boolean responceNull = false;
2.在dispatch()方法中,每次请求时将其设为false
private String dispatch() {
String postDataStr = null;
responceNull = false;
try {
postDataStr = StreamUtils.streamToString(request.getInputStream());
} catch (IOException e) {
logger.error("post data deal failed!");
e.printStackTrace();
}
// 解析数据
setPostData(postDataStr);
// 消息分发处理
dispatchMessage();
// 响应事件
String result = response();
return result;
}
3.在response()方法中,根据responseNull的值,如果为true,直接让xml的值为""
private String response(){
String result = null;
if (responceNull) {
return "";
}
try {
JaxbParser jaxbParser = new JaxbParser(WechatResponse.class);
//设置
jaxbParser.setCdataNode(WechatResponse.CDATA_TAG);
result = jaxbParser.toXML(wechatResponse);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
4.这样在调用时,如果对于不需要处理的消息内容,直接将responseNull设为true即可
/**
* 文本消息
*/
@Override
protected void onText() {
responceNull = true;
}