L'héritage de la classe WebMvcConfigurationSupport est la cause de l'échec de la configuration automatique

Il existe de nombreux articles sur Internet dans lesquels il est recommandé d'implémenter directement WebMvcConfigurer ou d'hériter directement de WebMvcConfigurationSupport lors de la construction de fichiers de configuration de printemps après spring boot2.0. Il n'y a aucun problème à implémenter WebMvcConfigurer après les tests, mais l'héritage de la classe WebMvcConfigurationSupport entraînera une configuration automatique échouer.

L'héritage de la classe WebMvcConfigurationSupport est la cause de l'échec de la configuration automatique

Une fois que la classe de configuration personnalisée de démarrage de printemps hérite de WebMvcConfigurationSupport, il est constaté que les chemins de ressources statiques configurés automatiquement (classpath: / META / resources /, classpath: / resources /, classpath: / static /, classpath: / public /) ne prennent pas effet.

Regardez d'abord la définition de la classe de configuration automatique:
Insérez la description de l'image icic'est parce qu'il y a des annotations conditionnelles sur la classe de configuration automatique Web Springboot WebMvcAutoConfiguration

@ConditionalOnMissingBean({
    
    WebMvcConfigurationSupport.class})
  • Cette annotation signifie que la classe de configuration automatique ne prendra effet que lorsque le bean de type WebMvcConfigurationSupport est manquant dans le chemin de classe du projet, vous devez donc réécrire vous-même la méthode correspondante après avoir hérité de WebMvcConfigurationSupport.

  • Si vous souhaitez utiliser la configuration automatique pour prendre effet et que vous devez remplacer certaines méthodes en fonction de vos propres besoins, comme l'ajout de viewController, vous pouvez hériter de la classe WebMvcConfigurerAdapter avec votre propre classe de configuration. Cependant, après la version Spring 5.0, cette classe a été supprimée WebMvcConfigurerAdapter. Bien qu'elle puisse toujours être utilisée, elle ne semble pas correcte.

  • Insérez la description de l'image iciCeci est un commentaire sur la classe, ce qui signifie que Java 8 sera utilisé après Spring 5.0, et que l'interface peut avoir une méthode par défaut dans Java 8, donc cette classe n'est pas nécessaire. Il suffit donc de l'implémenter directement dans la classe de configuration personnalisée

@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);
 }
}

Notez ce code:

registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");

Étant donné que l'héritage de WebMvcConfigurationSupport entraînera l'échec de la configuration automatique, l'emplacement de la ressource statique par défaut doit être spécifié ici. En même temps, veillez à ne pas écrire

registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");

Voici les raisons et les solutions pour lesquelles l'héritage de la classe WebMvcConfigurationSupport entraînera l'échec de la configuration automatique

Je suppose que tu aimes

Origine blog.csdn.net/weixin_45528650/article/details/112385872
conseillé
Classement