2017-06-03 47 views
0

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

任何人都可以告訴我哪裏出錯了嗎?

感謝

+1

你應該分裂你自己的處理程序和邏輯取代它。將BeanFactoryPostProcessor的邏輯移動到一個單獨的類中,而不是在同一個類中。這些'BeanFactoryPostProcessor'在進程已經設置好之前就運行得很早,但是由於擴展它仍然需要一個'ServletContext'。 –

回答

2

看起來像你的ResourceHttpRequestHandlerReplacer不知道ServletContext的,因爲你是從ResourceHttpRequestHandler擴展它是罕見的。嘗試添加到您的類

@Autowired 
ServletContext servletContext;