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 眼尖, 是为了置顶 ^_^

2020-11-11 17:11

这个有啥问题?

2020-11-11 15:06

可能你上传用的 cos 组件太老了,早期的 cos 不支持,建议使用最新版本:
cos-2020.4

2020-11-11 12:06

@yxkuser 其实还是为了提升开发效率,因为扫描可以在新建 controller 时不用打开 Routes,不用添加映射代码。 开发体验更好一些

当然,凡事 兴一利必生一弊,一切都是权衡后的选择。 你说的照顾 spring boot 用户绝对是很硬的理由,也确实是我考虑的一个方面

2020-11-11 12:04

@琴海森林 jfinal 官方出品的,必定是极高品质的设计,极高品质的代码实现,测试了 windows、mac os、linux,这样交付给你的才是一个值得信任的作品

选择 jfinal ,没错的

2020-11-11 12:03

@北流家园网 这个功能主要能进一步提升开发效率,具体来说就是你在新建一个 Controller 的时候,省去了打开 Routes、添加 controller 注册这两个动作

当然,凡事 兴一利必生一弊,你说的这个根据路由快速找到 controller 的问题当然是存在的

所以,这个扫描功能相当于一个外挂性扩展,喜欢的同学可以用,不喜欢的可以沿用原来的用法

我自己试用的结果是正面的,体验很好。我个人建议你试用一下。 你提到的根据路由快速找到 controller 的问题确实存在,但有两点信息可以关注一下:
1:拿到一个 url 例如 "/club/join" ,其实可以使用搜索功能,搜索 @Path("/club 定位

2:我个人的开发实践表明,其实我很少在得到一个 url 以后通过查找 Routes 中的注册信息去定位 controller 。 因为一般来说路由使用的就是 controller 命名时的前缀,例如看到 "/club/join" 我会猜测对应的控制器是 ClubController

希望你在试用后能跟我反馈一下,体验是好是坏,我需要得到反馈,这样便于进一步迭代提升

2020-11-10 22:13

@qsyan 我觉得你今天看到 jfinal 也有路由扫描,仅从这一个功能特性就认定是轮子,这个显然是不全面的

因为,所有的 web orm aop 框架,不可能没有一点儿相似的地方,我强调,是所有的这类框架

2020-11-10 22:11

@qsyan 如果你真的仔细看过 jfinal 源代码,你就会知道 jfinal 与 spring 完全是两个世界,完全是两种不同的设计

再告诉你一个事实, jfinal 是 2011 年就存在的,开源是在 2012 年 3 月 18 日,这里有记录:
https://www.oschina.net/p/jfinal

而 spring boot 是 2014 年左右才出生,也就是说 jfinal 比 spring boot 早出生将近 3 年,jfinal 顶层设计 10 年不变

从这个出生的时间先后次序,你应该可以接受 jfinal 并不是 spring boot 的轮子。 倒是 spring boot 很多用法跟 jfinal 早期的设计很像

例如抛弃 xml, 简化配置, 约定大于配置, 谁是轮子,相信你有个新的认知

2020-11-10 22:00

@qsyan 应该是小编误点了,抱歉

有关是不是造轮子的事情,还请说得更详细一些

有时候确实是造轮子,有时候造的轮子会更好用

jfinal 的功能十分丰富,但代码量只有 3 万行,比 spring 少了十倍不止,如果如你所说是造轮子,应该也是一个更轻量更简单的轮子,有很多人还是很喜欢这样的轮子的

2020-11-10 21:52

看异常是缺少依赖:
java.lang.NoClassDefFoundError: org/apache/calcite/schema/Table

这个异常一般是缺包,或者是其版本不对,应该是与 jfinal 无关的