2017-06-03 1 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で。

iveがどこに間違っているかアドバイスできますか?

おかげ

+1

あなた自身のハンドラとそれを置き換えるロジックを分割する必要があります。 'BeanFactoryPostProcessor'のロジックを同じクラスではなく別のクラスに移動します。これらの 'BeanFactoryPostProcessor'は何かが設定される前にprocesの非常に早い段階で実行されますが、拡張のためにまだ' ServletContext'が必要です。 –

答えて

2

ResourceHttpRequestHandlerReplacerは、あなたがResourceHttpRequestHandlerからそれを拡張しているため、稀であるのServletContext、を認識していないように見えます。これをクラスに追加してみてください

@Autowired 
ServletContext servletContext; 
関連する問題