以编程方式调用@Controller
问题内容:
我正在转换使用Spring MVC Controller的实现的代码,以使用注释构造型@Controller。除了一个问题,其他一切都很好:
给定一个请求/响应,我如何以编程方式处理对基于注释的控制器的请求?
以前,(无论实现如何)我都能打电话给:
controller.handleRequest(request, response)
带注释的等效项是什么?我曾假设会有一些(也许是静态的?)实用程序类:
SpringAnnotationBasedControllerUtils.handleRequest(<? extends @Controller> handlerObject, HttpServletRequest request, HttpServletResponse response);
处理将请求映射到@Controller构造型允许的动态签名的详细信息,但我找不到这样的东西。
有什么建议么?
(请不要评论为什么这是一个坏主意,或者对于一个“好的”设计是不必要的,等等。这是正在维护的代码,必须尽可能不具侵入性,因此,此时不能进行完全重写。 )
谢谢!
问题答案:
您只需在对象上调用方法。这是注释驱动控制器的最大好处之一,您可以只编写代码所需的方法,而不必为了适应接口而使形状变形。因此,只需将控制器bean连接到代码中,然后直接调用该方法即可。
还是说您想重新发明Spring将请求映射到带注释的控制器的机制?如果是这样,请查看Spring
AnnotationMethodHandlerAdapter
和DefaultAnnotationHandlerMapping
类的源代码。但是,它很复杂-
带注释的控制器使编写控制器更加容易,但是底层机制令人不快。