一个Action类只能实现一个路由?
zzzzbw opened this issue · 6 comments
Is your feature request related to a problem? Please describe.
Action
类是通过实现WorkAction
接口的execute()
方法来实现路由的,这样一个类只能实现一个路由,实际使用起来未必会有点麻烦吧
Describe the solution you'd like
如果能够像spring mvc那样一个controller下可以有多个RequestMapping就比较好吧。
Describe alternatives you've considered
Action
类不用实现WorkAction
接口,直接扫描所有被@CicadaAction
注解的类,然后再反射获取这个类中被@CicadaExcute
注解的方法(我看到有@CicadaExcute
这个注解,但没有被使用,是否是准备用于这方面的?),再反射调用这个方法。
不过这样的话就是比较难约束用户对于被@CicadaExcute
注解的方法传入的参数,我想到有两种方式约束:
- 约束必须传入且只能传入
CicadaContext
和Param
,否则就抛出异常 - 可以任意传入参数,如果检查到有
CicadaContext
或Param
就在invoke的时候传进去,如果没有就不传,如果有其他参数就传null值。
@crossoverJie
哈哈,竟然被我提前说出来了。
不过我还是比较想了解对于方法传参你准备怎么处理的?
之前我也写了一个mvc框架,感觉上面提到的两个方式都不是很好。
现在已经有一个大概的思路。其中的参数传递可以是自定义的 pojo
,比如:
@CicadaExcute("get")
public void get(CicadaContext context,User user){
context.json(user);
}
甚至 CicadaContext context
也可以不要,毕竟这个上下文可以在一次请求的任意一个地方获取。
同时也可以在参数中使用 Cicada
预设的 CicadaRequest、CicadaResponse、CicadaCookie
等。
只需要在路由过程中将数据反射写入具体的参数即可。
谢谢你的解答,期待其实现
@crossoverJie
自定义pojo的话,我觉得可以通过不同的注解到path、header、param或者content取值
嗯,实现都是一样的。只是注解可读性更强。