JbootActionHandler的疑问
JbootActionHandler中以下代码,在接收微信前端输入的文本消息时,有时可以回复,有时无法回复, 以下这行代码会报错误,报找不到页面错误,以下MsgController并不需要页面,
@RequestMapping("/msg") public class MsgController extends MsgControllerAdapter
JbootActionHandler在执行到130行时报错,找不到action.getViewPath()对应的页面,实际并不需要页面。 render.setContext(request, response, action.getViewPath()).render();
微信sdk renderText(outMsgXml, "text/xml");
public void render(OutMsg outMsg) { String outMsgXml = outMsg.toXml(); if (ApiConfigKit.isDevMode()) { System.out.println("发送消息:"); System.out.println(outMsgXml); System.out.println("--------------------------------------------------------------------------------n"); } if (ApiConfigKit.getApiConfig().isEncryptMessage()) { outMsgXml = MsgEncryptKit.encrypt(outMsgXml, this.getPara("timestamp"), this.getPara("nonce")); } this.renderText(outMsgXml, "text/xml"); }
经常性报页面找不到错误,在jbootactionrender 执行render时是不是需要添加判断。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
回复
@Retire : 最终的结果如何?
回复
@理工男海哥 : 好,我做个测试
回复
@理工男海哥 : 测试一下,测不出来,相同的代码在测试公众号没有问题,在正式公众号上就有问题。
@理工男海哥 回复
@理工男海哥 : 项目上线,暂时未测,测试了,我反馈给你
引用来自“Retire”的评论
错误信息:
ERROR io.jboot.web.handler.JbootActionHandler - /msg?signature=77e05f17aad392843b3×tamp=152709&nonce=1775&openid=
java.lang.RuntimeException: File not found : D:webappapp8090webRoot/msg/index.html
at com.jfinal.template.source.FileSource.getContent(FileSource.java:70)
at com.jfinal.template.Engine.buildTemplateBySourceFactory(Engine.java:154)
at com.jfinal.template.Engine.getTemplate(Engine.java:139)
at io.jboot.web.render.JbootRender.render(JbootRender.java:62)
at io.jboot.web.handler.JbootActionHandler.handle(JbootActionHandler.java:139)
at io.jboot.web.handler.JbootHandler.doHandle(JbootHandler.java:73)
at io.jboot.web.handler.JbootHandler.handle(JbootHandler.java:58)
at io.jboot.web.cache.ActionCacheHandler.handle(ActionCacheHandler.java:45)
at io.jboot.web.handler.JbootFilterHandler.handle(JbootFilterHandler.java:46)
at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:73)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
通过这个错误信息可以知道,错误是 JbootRender 在进行 render() 的时候错误的。
但是如果是调用了 renderText() ,最终命中的应该是 JbootTextRender 进行 render() ,而不是 JbootRender。 JbootTextRender 是不需要ViewPath的,传null也没关系。
所以肯定在哪个位置没有调用 renderText() 。
当开发者没有进行任何的render的时候,Jboot(Jfinal也一样)会自己创建一个 Render ,也就是 JbootRender 进行渲染。
出现这种情况还有一种可能:就是用户传入的事件 或者 消息类型,你自己没有处理,从而出现了 找不到模板的情况。
renderOutTextMsg 就是这个方render时报的错,我目前加了判断,就可以自动回复消息了。
引用来自“理工男海哥”的评论
不需要回复的时候,应该是 renderNull() ,而不应该是什么都不做。
错误信息:
ERROR io.jboot.web.handler.JbootActionHandler - /msg?signature=77e05f17aad392843b3×tamp=152709&nonce=1775&openid=
java.lang.RuntimeException: File not found : D:webappapp8090webRoot/msg/index.html
at com.jfinal.template.source.FileSource.getContent(FileSource.java:70)
at com.jfinal.template.Engine.buildTemplateBySourceFactory(Engine.java:154)
at com.jfinal.template.Engine.getTemplate(Engine.java:139)
at io.jboot.web.render.JbootRender.render(JbootRender.java:62)
at io.jboot.web.handler.JbootActionHandler.handle(JbootActionHandler.java:139)
at io.jboot.web.handler.JbootHandler.doHandle(JbootHandler.java:73)
at io.jboot.web.handler.JbootHandler.handle(JbootHandler.java:58)
at io.jboot.web.cache.ActionCacheHandler.handle(ActionCacheHandler.java:45)
at io.jboot.web.handler.JbootFilterHandler.handle(JbootFilterHandler.java:46)
at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:73)
at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:61)
引用来自“理工男海哥”的评论
不需要回复的时候,应该是 renderNull() ,而不应该是什么都不做。
不需要回复的时候,应该是 renderNull() ,而不应该是什么都不做。