我想在我的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'。 –