jfinal3.2升级3.5启动报错

3.2升级3.5后启动直接抛错,那5点注意事项好像没有用到。

Starting JFinal 3.5

Starting scanner at interval of 5 seconds

Starting Jetty Server 9.4.12.v20180830 on port: 8088


2018-10-09 10:19:00

[WARN]-[Thread: main]-[com.jfinal.core.paragetter.ParaProcessorBuilder.createParaGetter()]: you should add compiler flag -parameters to support parameter auto binding


2018-10-09 10:19:00

[WARN]-[Thread: main]-[com.jfinal.core.paragetter.ParaProcessorBuilder.createParaGetter()]: you should add compiler flag -parameters to support parameter auto binding


2018-10-09 10:19:00

[WARN]-[Thread: main]-[com.jfinal.core.paragetter.ParaProcessorBuilder.createParaGetter()]: you should add compiler flag -parameters to support parameter auto binding

Starting Complete. Welcome To The JFinal World (^_^)


评论区

JFinal

2018-10-09 11:18

参考一下这个文档:
http://www.jfinal.com/doc/3-3

如果确实是因为某个 action 并不是真的 action ,用一下 jfinal 3.5 的新功能:
@NotAction
public void action() {
...
}

上面的 @NotAction 去修饰一下报错的 action 即可

ttjs2013

2018-10-09 12:13

@JFinal 现在定位到是WeixinMsgController这个方法报错的,这个是JFinal-weixin的一个方法。顶层父类是MsgController。已经安装文档上的设置方法设置了eclipse,但还是无法解决方法传参的错误

ttjs2013

2018-10-09 12:23

@JFinal 现在发现好像JFinal3.5跟JFinal-Weixin集成有问题

10000

2018-10-13 23:27

@JFinal 今天也发现了这个问题,加了NotAction解决了!原因是我有自己的BaseController,里面有很多public方法,而且方法也有重名的,导致ActionMapping加载时提示/action/actionKey加载重复异常。

JFinal

2018-10-14 10:21

@10000 由于 jfinal 3.5 添加了 action 带参功能,原本那些带参的 public 方法在升级到 jfinal 3.5 以后变成了 action,这时候就可以通过 @NotAction 很方便去除这些 action 了

ttjs2013

2018-10-31 16:41

@JFinal 只要加上这个controller,WeixinMsgController扫描就一定会报错了

JFinal

2018-10-31 16:52

@ttjs2013 这个是因为 jfinal 3.5 已经默认支持 action 带参,而 WeixinMsgController 中正好有几个带参的 action, 但是你的 eclipse 没配置好,所以会有提示,文档中已经有过说明:
http://www.jfinal.com/doc/3-3

可通过配置 eclipse 解决,也可以不必理会。 还有一种解办法是引入一个中间类,例如叫 MyWeixinMsgController extends WeixinMsgController ,然后在其中覆盖掉父类那几个有提示的方法,并在这些方法之上使用 @NotAction

最后,让你原先继承 WeixinMsgController 改为继承 MyWeixinMsgController

jfinal weixin 2.2 已经使用 @NotAction 改进过 WeixinMsgController

ttjs2013

2018-10-31 17:48

@JFinal 好的,谢谢波总。刚刚看了一下2.2的代码,知道怎么改了

himans

2018-11-06 15:35

@JFinal [WARN]-[Thread: main]-[com.jfinal.core.paragetter.ParaProcessorBuilder.createParaGetter()]: you should add compiler flag -parameters to support parameter auto binding
我突然发现了4个warn,刚升级好Jfinal和club没有这些warn;在IDEA中的compiler选项中加了-parameters参数也无效,检查所有BaseController方法都已经注释了@NoAction

JFinal

2018-11-06 17:09

@himans 应该是 jfinal weixin 中的 MsgController、ApiController 这类 controller 引起的,在 ParaProcessorBuilder.createParaGetter() 中设置个断点,看看当时的 controller 与 method 是哪个就知道解决了

himans

2018-11-06 20:49

@JFinal 检查了一下,是有几个小朋友写的Controller中的方法带参了。
解决方法是:在IDEA的settings里面的java compiler中,除了之前给“Additional command line parameters”里添加-parameters参数,这次强行指定了“Project bytecode version”为8(之前未指定),重新启动就会重新编译,warn消失。

JFinal

2018-11-06 22:35

@himans 这个警告一般没事,只是不好看而已

lainstar

2018-11-08 15:10

@JFinal 终于解决了,一度犯强迫症必须给他去掉,原因是有的Controller里带参数了,用了@NotAction注解就好了~

Jefitar

2019-09-23 12:28

遇到了同样的问题。问题1:“方法名" can not be mapped, actionKey ... is already in use,解决方法:报错的方法使用@NotAction。问题2:you should add compiler flag -parameters to support parameter auto binding,原因:com.jfinal.weixin.sdk.jfinal.MsgController中的renderOutTextMsg()方法是带参数方法,应该使用@NoAction,解决方法:将jfinal-weixin 升级至2.4即可。

热门反馈

扫码入社