setActionHandler影响me.setResolveJsonReque

我想用action注入的方式接收参数,开启了me.setResolveJsonRequest(true);

在5.0.0的版本用没问题,但是有个下次就是我改代码热部署之后就不能解析了,要重启。

于是我升级了下5.1.5版本,结果报

java.lang.ClassCastException: io.undertow.servlet.spec.HttpServletRequestImpl cannot be cast to com.jfinal.core.paragetter.JsonRequest

在我排查之后确定是我整和了第三个安全框架sa-token这个框架是用Handler接管的请求

public void configHandler(Handlers me) {

//sa-toke接管请求

me.setActionHandler(new SaTokenActionHandler());

}

我去掉SaTokenActionHandler这配置就不会报这个错,但是这个SaTokenActionHandler配置在5.0.0版本不会出现报错。

评论区

JFinal

2024-01-02 14:17

SaTokenActionHandler 是不是基于老版本 jfinal 编译到 jar 中了,注意要跟着升级到新版本再编译

此外 jfinal-undertow 也升一下级

航程序员

2024-01-03 09:53

总结一下 使用action注入的时候依赖fastjson1就不会出现热部署报错,cannot be cast to com.jfinal.core.paragetter.JsonRequest是自定义的ActionHandler造成的已经 都解决了

JFinal

2024-01-03 12:42

cannot be cast .... 这类错误,或者说热加载错误两个主要方法:
1: 配置 hotSwap
2: 如果配置解决不了,可能是被依赖的类发生了变化,需要重新编译依赖的类

航程序员

2024-01-04 11:59

@JFinal 解决了,没配置啥,我就是把版本变成1就行了没啥影响,我用fastjson2的兼容包,官方原话“可以使用兼容包,兼容包不能保证100%兼容”

热门反馈

扫码入社