Spring Boot2.0の後にSpring構成ファイルを構築するときにWebMvcConfigurerを直接実装するか、WebMvcConfigurationSupportを直接継承することをお勧めするインターネット上の記事がたくさんあります。テスト後にWebMvcConfigurerを実装することは問題ありませんが、WebMvcConfigurationSupportクラスを継承すると自動構成が行われます。不合格。
WebMvcConfigurationSupportクラスを継承すると、自動構成が失敗する原因になります
Spring Bootカスタム構成クラスがWebMvcConfigurationSupportを継承した後、自動的に構成された静的リソースパス(classpath:/ META / resources /、classpath:/ resources /、classpath:/ static /、classpath:/ public /)が使用しないことがわかりました。効果。
自動構成クラスの定義を最初に見てください。
これは、springbootWeb自動構成クラスWebMvcAutoConfigurationに条件付きアノテーションがあるためです。
@ConditionalOnMissingBean({
WebMvcConfigurationSupport.class})
-
このアノテーションは、自動構成クラスが有効になるのは、タイプWebMvcConfigurationSupportのBeanがプロジェクトのクラスパスにない場合のみであることを意味します。したがって、WebMvcConfigurationSupportを継承した後、対応するメソッドを自分で書き直す必要があります。
-
自動構成を使用して有効にする必要があり、viewControllerの追加など、独自のニーズに応じていくつかのメソッドをオーバーライドする必要がある場合は、WebMvcConfigurerAdapterクラスを独自の構成クラスで継承できます。ただし、Spring 5.0バージョン以降、このクラスはWebMvcConfigurerAdapterで破棄されました。引き続き使用できますが、見栄えがよくありません。
-
これはクラスに関するコメントです。つまり、Java8はSpring5.0以降で使用され、インターフェイスはJava 8でデフォルトのメソッドを持つことができるため、このクラスは不要です。したがって、カスタム構成クラスに直接実装するだけで済みます。
@Configuration
public class JsonConfigurer extends WebMvcConfigurationSupport {
@Override
protected void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**").excludePathPatterns("/emp/toLogin","/emp/login","/js/**","/css/**","/images/**");
super.addInterceptors(registry);
}
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
super.addResourceHandlers(registry);
}
}
このコードに注意してください:
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
WebMvcConfigurationSupportを継承すると自動構成が失敗するため、デフォルトの静的リソースの場所をここで指定する必要があります。同時に、書かないように注意してください
registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
これらは、WebMvcConfigurationSupportクラスを継承すると自動構成が失敗する理由と解決策です