通过注解实现路由前缀配置,并自动扫描,主要是减少Routes的继承与书写.可以向spring系列一样,在controller加上@RequestMapping来实现路由前缀配置.拦截器配置,视图路径配置等
使用方式:
第一步:
@Override public void configRoute(Routes routes) { // 自定义自动扫描路由工具,与系统不冲突 RoutesKit.initRoutes(routes); }
第二步,在Controller上加上使用的注解即可,可以配置viewPath,与拦截器
@RequestMapping("/u") public class LoginController extends BaseController { .... }
具体实现代码:
定义注解,主要有 路由,视图路径,与拦截器三个属性
/*** * 请求映射前缀, 只能用于类上 * 例如:RequestMapping("/hello),则 实际url为 /hello/方法名称 */ @Retention(RUNTIME) @Target(TYPE) public @interface RequestMapping { /*** * 请求的前缀 */ String value() default "/"; /*** * 返回视图的前缀,用于没有分离视图用,如果没有配置,则默认使用路由的前缀 */ String viewPath() default ""; /*** * 拦截器 */ Class<? extends Interceptor>[] interceptor() default {}; }
具体扫描实现:
/** * @createTime: 2019/1/6 * @author: HingLo * @description: 路由自动扫描工具 */ public class RoutesKit { /*** * 初始化路由工具 在JFinalConfig中configRoute方法中调用,通过对controller上加上RequestMapping 来自动扫描与初始化路由<br> * 需要通过:hutool工具包中ClassUtil工具来进行扫描类 * @param routes JFinalConfig 中路由配置的configRoute 参数 */ public static void initRoutes(Routes routes) { //扫描项目下的所有的带有RequestMapping 的Controller Set<Class<?>> set = ClassUtil.scanPackageBySuper("", Controller.class); for (Class x : set) { RequestMapping annotation = (RequestMapping) x.getAnnotation(RequestMapping.class); // 用来限制只有加上了RequestMapping注解的controller才进行自动初始化 if (annotation == null) { continue; } // 获取controllerKey final String path = getPath(annotation.value()); // 获取视图路径 String viewPath = annotation.viewPath(); // 获取拦截器 Class<? extends Interceptor>[] interceptor = annotation.interceptor(); Routes routes1 = new Routes() { @Override public void config() { // 添加拦截器 if (interceptor.length > 0) { for (Class<? extends Interceptor> aClass : interceptor) { addInterceptor(ReflectUtil.newInstance(aClass)); } } // 设置视图,如果视图是空,使用path 作为视图路径 setBaseViewPath(StrKit.isBlank(viewPath) ? path : viewPath); // 设置路由 add(path, x); } }; routes.add(routes1); } } /*** * 请求路由处理 * @param path 原始路由 * @return 返回处理后的路由 */ private static String getPath(String path) { path = path.trim(); if (!path.startsWith("/")) { path = "/" + path; } if (path.endsWith("/")) { path = path.substring(0, path.length() - 1); } return path; }
结尾:自此就结束了,整体代码都不是很多,但是需要引入:hutool这个工具包进行Controller扫描.hutool工具包的地址:Hutool 工具包文档地址