Controller代码量大了,怎么拆分成多个类文件,但共用同一个Url?


项目不断更新迭代中,Controller类会变得越来越大,不好浏览和维护,我想拆分成多个类文件,但共用一个url,但是Routes添加两个相同的url会报错。而且jfinal对java8的接口默认方法,好像也不支持拆分Controller。


怎么办?spring mvc支持默认方法拆分,jfinal怎么支持

spring mvc支持的默认方法的controller代码拆分

interface HelloControllerExpander {

HelloDao dao=new HelloDao()

@RequestMapping(value = "/add",method = RequestMethod.GET)
    default List<T> get() {
    return dao.getList();
    }
}

@RequestMapping("/hello")
class HelloController implements HelloControllerExpander {


}


评论区

JFinal

2020-05-20 14:46

可以使用 @ActionKey 注解

此外, controller 中的代码应该要极少,所以一般无需拆分。如果想拆分,先警惕一下是不是业务逻辑写在了 controller 中

绝大部分代码应该放在 service 中

tctc4869

2020-05-20 14:54

@JFinal ActionKey注解不能写在类上啊,我这里指不是action的uri,是Controller本身的url

tctc4869

2020-05-20 14:57

@tctc4869 me.add(controllerKey, controllerClass),如果添加两个相同的url字符串,会报错

JFinal

2020-05-21 17:23

@tctc4869 controllerKey 顾名思义,它是 controller 的唯一 key,所以是被独占的,不能与多个 controller 共享

目前的解决办法是让某一个 controller 独享这个 controllerKey,然后在其它需要共享的地方使用 @ActionKey, 当然,这个注解只能用在方法上

你提的这个需求只有极少数人提出来过,目前看来需求并不是太大

jfinal 的路由做成当前的样子当然也是有很多考虑的,不可能支持所有需求,有一定的取舍,例如要考虑性能、学习成本等等

还要考虑对用户的代码有一定的规范性指导,每一个 controller 一个 key 值,对于模块化或者 restful 风格有一定的约束,会带来一些用户在浅层感受不到的好处,但对用户的代码切实有利的好处

JFinal

2020-05-21 17:24

最后,如果不习惯使用 @ActionKey, 使用一下 Handler 做一下 url 的处理也是可以实现你需要的功能的

ymwcwee

2020-09-14 10:18

楼主解决了吗?我也遇到这个问题了,api的controller越写越大了,想拆分啊