3
回答
jfinal 自定义菜单报错
【腾讯云】校园拼团福利,1核2G服务器10元/月!>>>   

在jfinal官网下载微信demo,部署后测试自定义菜单,报错:

java.lang.IllegalStateException: 需要事先使用 ApiConfigKit.setThreadLocalApiConfig(apiConfig) 将 ApiConfig对象存入,才可以调用 ApiConfigKit.getApiConfig() 方法。

我大致是这么实现的,在WeixinApiController.java里重写了index方法:

public void index(){

    redirect("/index.html");

}

index.html里是这么写的:

<form action="api/createMenu" method="POST">
   <input type="text" name="menuJson" />
   <input type="submit" value="提交" />
</form>

自定义的ApiInterceptor.java的intercept方法也添加了

ApiConfigKit.setThreadLocalApiConfig(((ApiController)controller).getApiConfig());这样的代码,不知道为什么还是会报这个错?

我的地址栏输入的是:微信接口url/api,跳到index.html后点击提交按钮,想让其执行WeixinApiController.java里的createMenu方法。点击“提交”按钮后就报上面的错了,刚开始做微信,求各位赐教!


举报
zhaoos
发帖于2年前 3回/247阅

以下是问题补充:

  • @zhaoos :ApiInterceptor.java加断点后,就没进入,所以关于threadlocal设定值的那段是没起作用,所以会取值为null (2年前)
共有3个答案 最后回答: 2年前

1:redirect("index.html") 改为  render("index.html")

2:你自己的 controller 需要继承 ApiController

3:查看控制台输出,看jfinal action report 中 ApiInterceptor 这个拦截是否存,此拦截器会自动化进行一些必要的操作

引用来自“JFinal”的评论

1:redirect("index.html") 改为  render("index.html")

2:你自己的 controller 需要继承 ApiController

3:查看控制台输出,看jfinal action report 中 ApiInterceptor 这个拦截是否存,此拦截器会自动化进行一些必要的操作

我是照着demo里的WeixinMsgController来写的,让demo里的WeixinApiController继承ApiControllerAdapter(这个类是手动新添加的),ApiControllerAdapter继承ApiController,在ApiController的index方法上使用前拦截器ApiInterceptor,这样的继承层级有什么问题吗?
--- 共有 3 条评论 ---
JFinal回复 @zhaoos : ApiController 是 jfinal weixin 提供的,你在这上面的 index() 上添加拦截器? 是直接改的源码? ApiController 这个类,声明了类级别的拦截器,你仔细看一下 2年前 回复
zhaoos回复 @JFinal : 不好意思,是我表述不清还是没理解您的意思。我再说一遍啊,我是在ApiController的index方法上加的前拦截器,如果按照您说的,继承ApiController后不需要在index方法上加拦截器,那么拦截器是在哪里配置呢? 2年前 回复
JFinal继承了 ApiController 就不需要在 index 方法上使用 ApiInterceptor了,因为继承时会连同拦截器一起继承,注意看一下 控制台输出的 jfinal action report 是否有 ApiInterceptor 2年前 回复

引用来自“JFinal”的评论

1:redirect("index.html") 改为  render("index.html")

2:你自己的 controller 需要继承 ApiController

3:查看控制台输出,看jfinal action report 中 ApiInterceptor 这个拦截是否存,此拦截器会自动化进行一些必要的操作

引用来自“zhaoos”的评论

我是照着demo里的WeixinMsgController来写的,让demo里的WeixinApiController继承ApiControllerAdapter(这个类是手动新添加的),ApiControllerAdapter继承ApiController,在ApiController的index方法上使用前拦截器ApiInterceptor,这样的继承层级有什么问题吗?

MsgInterceptor中找到这样一段注释:

/ * 注意: MsgController 的继承类如果覆盖了 index 方法,则需要对该 index 方法声明该拦截器

 * 因为子类覆盖父类方法会使父类方法配置的拦截器失效,从而失去本拦截器的功能**/,应该是您说那意思。

action report没有在后台打印出来,我在ApiInterceptor中加的断点也没进去,是哪里写错了。


顶部