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;
}


posted @ 2019-12-13 08:36  半湖思絮  阅读(84)  评论(0编辑  收藏  举报