寻找一种解决方案,用另一个Component/Annotation扩展Spring MVC

Bel*_*lun 4 architecture spring spring-mvc

假设我有一个在普通模式(浏览器)和其他模式下使用的网站,如MobileView模式(在移动应用程序内).对于我创建的每个Controller,可能有MobileView的相应控制器,处理相同的URL.

最简单的解决方案是在所有具有MobileView逻辑的控制器中创建ifs.另一个解决方案是使用MobileView的对应URL(类似于普通URL)和两个独立的控制器(可能从一个扩展到另一个;或使用其他方式来回收公共代码)

但是,一个更优雅的解决方案是有一些额外的注释,比如@SupportsMobileView(标记一个控制器,并告诉应用程序这将有一个对应的MobileView控制器)和@MobileViewController(标记第二个控制器,并告诉应用程序)在使用@SupportsMobileView标记的初始控制器之后,此控制器需要立即运行.普通控制器和MobileView控制器之间的链接将通过它们处理的URL(使用@RequestMapping定义).

是否可以扩展Spring MVC(A)?在哪里注入新的注释扫描器(B)和注释处理程序/组件处理程序(C)?如何执行MobileView控制器(D)(现在我认为它可以通过AOP执行,我的新控制器类型的新处理程序以编程方式在相应的普通控制器上创建一个连接点)

请注意,我没有提到如何触发和检测此MobileView模式.我们只是说有一个Session布尔变量(标志).

欢迎任何要点(A),(B),(C)或(D)的批评者,以及任何要点或整个解决方案的技术提示和替代解决方案.

xwo*_*ker 5

HandlerInterceptor可用于拦截RequestMapping处理.是一个如何配置和实现一个的简单示例.

您可以检查您的会话变量,并且有一堆方法可以让您进行自定义处理,或者只是通过移动视图从普通控制器处理交换视图.