2020-11-12 19:06

@路遥_美好人生 为了避免与 Kv 重名,这个类可以改为 Tkv , 表示 typed key value

2020-11-12 18:04

@路遥_美好人生 HashMap 的用法不简洁,不支持链式调用,Kv 用着多爽

2020-11-12 17:31

适用于对类型有要求的场景,赞一个

2020-11-12 16:56

@天眼 刚刚开源的项目,代码很新,难免有点小 bug

2020-11-12 16:39

刚刚帮你在 qq 上解决了,原因是: 刚刚原因是maven本地目录的jfinal-undertow 2.2有问题, 删除下后重新maven install 好了

2020-11-12 16:33

gitee 上 star 和 fork 了一份,以后有同学需要的时候直接给这个方案

2020-11-12 16:32

看了一下源码,非常简洁干静,一个类就搞定了, 谢谢分享, 赞

我也收藏一份

2020-11-12 16:31

@杜福忠 同学的方向是最好的, 在 configHandler 中可以配置 ActionHandler :
me.setActionHandler(...)

你只需要拿到 jfinal 默认的 ActionHandler, 继承一下它, 然后覆盖掉父类的 handler 方法, 然后将父类 handle 方法中的内容照抄,再加上自己的 ip 输出就可以了

注意,有几处地方输出了 404 Action Not Found, 都要处理一下

2020-11-12 16:02

@或是的话 我再补充一下,有些情况可能比你现在的需求更复杂,除了用 @Clear 适当清除以外

还要以在拦截器内部去控制,例如下面这样:
pubic MyInter implements Interceptor {
// 用于排除指定的 controllerPath 不拦截
Set《String》excludeControllerPathSet = new HashSet();

// 初始化。可以通过外部配置文件来初始化,或者读数据库 初始化
static {
excludeControllerPathSet.add("/xxx");
excludeControllerPathSet.add("/yyy");
...
}

public void intercept(Invocation inv) {
// 被排除的 controllerPath 不拦截,直接调用 invoke() 放行
if (excludeControllerPathSet.contains(inv.getControllerPath()) {
inv.invoke();
return ;
}

// 这里放上拦截逻辑
....
}
}

2020-11-12 15:57

@或是的话 你是有另外一个全局拦截器,这里你先叫做 GlobalInterceptor 我想让这个全局拦截器在全局起作用 唯独不想在在这个 routes 底下起作用

上面是我对你需求的一个重复确认,下面是我假定你项目的一些其它特征:
1:我假定你有 AaaRoutes、BbbRoutes、CccRoutes 三个 Routes
2:你现在还有一个 GlobalInterceptor ,但你不希望它在 AaaRoutes 中有效

你只要换个思路就可以解决了:
1:将 GlobalInterceptor 从 configInterceptor(Interceptors inters) 中拿掉
2:再将 GlobalInterceptor 分别添加到 BbbRoutes、CccRoutes 中就可以了,也就是说唯独 AaaRoutes 中不添加它

当然,将 GlobalInterceptor 改个名字可能更好,因为它已经不用于全局拦截了,而是选择性的挑选了一些 Routes 去拦截

总之,jfinal 的拦截器种类、配置、用法都在那里了,你只需要灵活组合着去用就一定可以解决

2020-11-12 11:52

估计你的 controller 中没有调用任何 render ,这种情况 jfinal 会帮你默认调用一个 reder(view) , view 的规则是:
view = baseViewPath + viewPath + methodName + ".html";

如果不想被调用,可以加一行 renderNull();

2020-11-12 11:17

看到你的 url, 感觉是你的 tomcat 的 context path 没配置好,一般我不建议配置这个:
https://my.oschina.net/jfinal/blog/353062

如果你一定要配置 context path ,也可以参考我上面的博客

2020-11-12 11:15

@moyush 这个还是建议自己写个辅助工具类来完成,很方便的

2020-11-12 11:14

Routes 级别拦截器使用的场景就是将所有需要该 Routes 拦截器的 controller 集中起来配置

你的需求其实很容易解决,将不需要 Routes 拦截器的 controller 移走入放在 configRoute(Routes me) 之中,通过 me.add(...) 添加,或者再拆分到一个新的 Routes 中去

一般来说,你的需求分两种情况:
1:需要移除 Routes 拦截器的 controller 数量较少,这种情况在相应的 controller 上用 @Clear 移除,例如你要处理的是 XxxController:
@Clear({XxxInter.class, YyyInter.class})
public class XxxController extends Controller {
...
}

2:需要移除 Routes 拦截器的 controller 数量较少,拆分为一个新的 Routes 就可以了

你所说的 为什么没有设计上 clearInterceptor()? 其实我不太明白你的具体用法和需求,前面我只是大概猜一下你想要的功能

2020-11-11 23:15

@SuperEric 眼尖, 是为了置顶 ^_^