我试图在Spring MVC应用程序中重写ResourceHttpRequestHandler。
到目前为止,我有以下课程:
@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 = [org.springframework.web.servlet.resource.PathResourceResolver@16943e88]]]未在ServletContext中运行。确保对象已完全配置!
我正在尝试重写,以便可以围绕尝试查找不是静态的但不是由控制器映射的资源来实现一些自定义逻辑,因为用户将能够为其CMS中的页面定义URL。
谁能告诉我香港专业教育学院哪里出了问题?
谢谢
最佳答案
似乎您的ResourceHttpRequestHandlerReplacer
不知道servletContext,这是罕见的,因为您是从ResourceHttpRequestHandler
扩展它的。尝试将其添加到您的班级
@Autowired
ServletContext servletContext;