无法路由到WeixinMsgController,报404 Action Not Found: /msg

各位大侠,刚刚接解JFINAL-WEIXIN这个优秀的框架,在使用WEIXIN DEMO可以正常处理微信服务器的通信。但自已按文档塔建WEIXIN服务时,使终无法路由到WeixinMsgController。
困扰多日,请帮助。

错误信息如下:
[WARN]-[Thread: qtp1940447180-17]-[com.jfinal.core.ActionHandler.handle()]: 404 Action Not Found: /msg

如有/的路由信息。
msg作为参数执行其他方法
Url : GET /msg
Controller : cn.colorful.Controller.IndexController.(IndexController.java:1)
Method : index
UrlPara : msg
Interceptor : com.jfinal.ext.interceptor.SessionInViewInterceptor.(SessionInViewInterceptor.java:1)

===============================================================
配置文件:
public void configRoute(Routes me) {
// me.add("/home",IndexController.class);
//配置微信访问路由
me.add("/msg", WeixinMsgController.class);
me.add("/api", WeixinApiController.class, "/api");
// me.add("/pay", WeixinPayController.class);

WeixinMsgController
public class WeixinMsgController extends MsgControllerAdapter {
String helpStr="帮助信息!";
protected void processInTextMsg(InTextMsg inTextMsg) {
String msgContent = inTextMsg.getContent().trim();

	// 帮助提示
	if ("help".equalsIgnoreCase(msgContent)) {
		OutTextMsg outMsg = new OutTextMsg(inTextMsg);		outMsg.setContent(helpStr);
		render(outMsg);
	}
	// 图文消息测试
	else if ("news".equalsIgnoreCase(msgContent)) {
		OutNewsMsg outMsg = new OutNewsMsg(inTextMsg);		outMsg.addNews("图文消息title", "图文消息description", "图文消息片 url", "图文消息 url");
		render(outMsg);
	}
	// 音乐消息测试
	else if ("music".equalsIgnoreCase(msgContent)) {
		OutMusicMsg outMsg = new OutMusicMsg(inTextMsg);		outMsg.setTitle("Day By Day");		outMsg.setDescription("建议在 WIFI 环境下流畅欣赏此音乐");		outMsg.setMusicUrl("http://www.jfinal.com/DayByDay-T-ara.mp3");		outMsg.setHqMusicUrl("http://www.jfinal.com/DayByDay-T-ara.mp3");		outMsg.setFuncFlag(true);
		render(outMsg);
	}
	else if ("美女".equalsIgnoreCase(msgContent)) {
		OutNewsMsg outMsg = new OutNewsMsg(inTextMsg);		outMsg.addNews("秀色可餐", "JFinal Weixin 极速开发就是这么爽,有木有 ^_^", "http://mmbiz.qpic.cn/mmbiz/zz3Q6WSrzq2GJLC60ECD7rE7n1cvKWRNFvOyib4KGdic3N5APUWf4ia3LLPxJrtyIYRx93aPNkDtib3ADvdaBXmZJg/0", "http://mp.weixin.qq.com/s?__biz=MjM5ODAwOTU3Mg==&mid=200987822&idx=1&sn=7eb2918275fb0fa7b520768854fb7b80#rd");
		render(outMsg);
	}
	// 其它文本消息直接返回原值 + 帮助提示
	else {
		OutTextMsg outMsg = new OutTextMsg(inTextMsg);		outMsg.setContent("\t文本消息已成功接收,内容为: " + inTextMsg.getContent() + "\n\n" + helpStr);
		render(outMsg);
	}
}

protected void processInImageMsg(InImageMsg inImageMsg) {
	OutImageMsg outMsg = new OutImageMsg(inImageMsg);
	// 将刚发过来的图片再发回去	outMsg.setMediaId(inImageMsg.getMediaId());
	render(outMsg);
}

protected void processInVoiceMsg(InVoiceMsg inVoiceMsg) {
	OutVoiceMsg outMsg = new OutVoiceMsg(inVoiceMsg);
	// 将刚发过来的语音再发回去	outMsg.setMediaId(inVoiceMsg.getMediaId());
	render(outMsg);
}

protected void processInVideoMsg(InVideoMsg inVideoMsg) {
	/* 腾讯 api 有 bug,无法回复视频消息,暂时回复文本消息代码测试
	OutVideoMsg outMsg = new OutVideoMsg(inVideoMsg);	outMsg.setTitle("OutVideoMsg 发送");	outMsg.setDescription("刚刚发来的视频再发回去");
	// 将刚发过来的视频再发回去,经测试证明是腾讯官方的 api 有 bug,待 api bug 却除后再试	outMsg.setMediaId(inVideoMsg.getMediaId());
	render(outMsg);
	*/
	OutTextMsg outMsg = new OutTextMsg(inVideoMsg);	outMsg.setContent("\t视频消息已成功接收,该视频的 mediaId 为: " + inVideoMsg.getMediaId());
	render(outMsg);
}

protected void processInLocationMsg(InLocationMsg inLocationMsg) {
	OutTextMsg outMsg = new OutTextMsg(inLocationMsg);	outMsg.setContent("已收到地理位置消息:" +						"\nlocation_X = " + inLocationMsg.getLocation_X() +						"\nlocation_Y = " + inLocationMsg.getLocation_Y() + 
						"\nscale = " + inLocationMsg.getScale() +						"\nlabel = " + inLocationMsg.getLabel());
	render(outMsg);
}

protected void processInLinkMsg(InLinkMsg inLinkMsg) {
	OutNewsMsg outMsg = new OutNewsMsg(inLinkMsg);	outMsg.addNews("链接消息已成功接收", "链接使用图文消息的方式发回给你,还可以使用文本方式发回。点击图文消息可跳转到链接地址页面,是不是很好玩 :)" , "http://mmbiz.qpic.cn/mmbiz/zz3Q6WSrzq1ibBkhSA1BibMuMxLuHIvUfiaGsK7CC4kIzeh178IYSHbYQ5eg9tVxgEcbegAu22Qhwgl5IhZFWWXUw/0", inLinkMsg.getUrl());
	render(outMsg);
}

protected void processInFollowEvent(InFollowEvent inFollowEvent) {
	OutTextMsg outMsg = new OutTextMsg(inFollowEvent);	outMsg.setContent("感谢关注 JFinal Weixin 极速开发,为您节约更多时间,去陪恋人、家人和朋友 :) \n\n\n " + helpStr);
	// 如果为取消关注事件,将无法接收到传回的信息
	render(outMsg);
}

protected void processInQrCodeEvent(InQrCodeEvent inQrCodeEvent) {
	OutTextMsg outMsg = new OutTextMsg(inQrCodeEvent);	outMsg.setContent("processInQrCodeEvent() 方法测试成功");
	render(outMsg);
}

protected void processInLocationEvent(InLocationEvent inLocationEvent) {
	OutTextMsg outMsg = new OutTextMsg(inLocationEvent);	outMsg.setContent("processInLocationEvent() 方法测试成功");
	render(outMsg);
}

protected void processInMenuEvent(InMenuEvent inMenuEvent) {
	OutTextMsg outMsg = new OutTextMsg(inMenuEvent);	outMsg.setContent("processInMenuEvent() 方法测试成功");
	render(outMsg);
}

protected void processInSpeechRecognitionResults(InSpeechRecognitionResults inSpeechRecognitionResults) {
	OutTextMsg outMsg = new OutTextMsg(inSpeechRecognitionResults);	outMsg.setContent("processInSpeechRecognitionResults() 方法测试成功");
	render(outMsg);
}


评论区

Max_Qiu

2019-02-14 15:06

https://www.jfinal.com/doc/14-1

如果是jfinal3.6的话需要me.setMappingSuperClass(true)
其他的情况就不清楚了

topdot

2019-02-14 17:25

@Max_Qiu 可以了,非常感谢!

JFinal

2019-02-15 16:47

@Max_Qiu 干净利落

热门反馈

扫码入社