我想在我的Spring MVC应用程序中重写ResourceHttpRequestHandler。覆盖ResourceHttpRequestHandler Spring MVC
我有以下类到目前为止:
@Controller
public class ResourceHttpRequestHandlerReplacer extends ResourceHttpRequestHandler implements BeanFactoryPostProcessor {
@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
super.handleRequest(request, response);
}
public void postProcessBeanFactory(ConfigurableListableBeanFactory factory)
throws BeansException {
String[] names = factory.getBeanNamesForType(ResourceHttpRequestHandler.class);
for (String name : names) {
BeanDefinition bd = factory.getBeanDefinition(name);
bd.setBeanClassName("com.project.controllers.ResourceHttpRequestHandlerReplacer");
}
}
}
现在它应该只是调用父类的handleRequest所以没有什么应该已经改变了,但我得到这个消息:
产生的原因: java.lang.IllegalStateException:WebApplicationObjectSupport实例[ResourceHttpRequestHandler [locations = [],resolvers = [[email protected]943e88]]]不会在ServletContext中运行。确保物体已完全配置!
我想重写,以便我可以实现一些自定义逻辑,试图找到非静态但未由控制器映射的资源,因为用户将能够为页面定义URL在他们的CMS。
任何人都可以告诉我哪里出错了吗?
感谢
你应该分裂你自己的处理程序和逻辑取代它。将BeanFactoryPostProcessor的逻辑移动到一个单独的类中,而不是在同一个类中。这些'BeanFactoryPostProcessor'在进程已经设置好之前就运行得很早,但是由于扩展它仍然需要一个'ServletContext'。 –