WebMvcAutoConfiguration conflict with WebMvcConfigurationSupport. WebMvcConfigurerAdapterAutoConfiguration and WebMvcAutoConfiguration’s setting will maybe invalid when use WebMvcConfigurationSupport and it’s subclass

WebMvcAutoConfiguration conflict with WebMvcConfigurationSupport. WebMvcConfigurerAdapterAutoConfiguration and WebMvcAutoConfiguration’s setting will maybe invalid when use WebMvcConfigurationSupport and it’s subclass

这个错误信息表明你在 Spring Boot 应用中同时使用了 WebMvcAutoConfigurationWebMvcConfigurationSupport,这导致了一个冲突。在 Spring Boot 中,如果你继承了 WebMvcConfigurationSupport 或其子类来自定义配置,那么 Spring Boot 的自动配置 WebMvcAutoConfiguration 将不会生效。

当你创建并注册一个 @Configuration 类,继承自 WebMvcConfigurationSupport,Spring Boot 认为你想要完全控制 Web MVC 的配置,并且你将负责提供所有的配置(包括拦截器、视图解析器、消息转换器等)。这意味着 Spring Boot 的自动配置将不会被应用。

为了解决这个问题,有两种常见的方法:

方法 1:使用 WebMvcConfigurer

如果你的目的是对 Spring MVC 进行额外的自定义配置,而不是完全覆盖它,你应该实现 WebMvcConfigurer 接口而不是继承 WebMvcConfigurationSupport

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    // 实现 WebMvcConfigurer 的方法来添加你的配置
    // 例如,添加一个拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyCustomInterceptor()).addPathPatterns("/api/**");
    }

    // 其他方法覆写...
}

通过实现 WebMvcConfigurer 接口,你可以保留 Spring Boot 的自动配置功能,并且只添加或修改你需要的部分。

方法 2:移除对 WebMvcConfigurationSupport 的继承

如果你不需要任何特别的配置,或者你的 @Configuration 类没有提供任何有意义的自定义配置,那么你可以简单地删除这个类,或者不要继承 WebMvcConfigurationSupport

注意事项

  • 如果你在使用 Spring Boot 2.x 版本,WebMvcConfigurerAdapter 已经被弃用了。你应该直接实现 WebMvcConfigurer 接口。
  • 在继承 WebMvcConfigurationSupport 或实现 WebMvcConfigurer 时,要确保不要同时在项目中使用 @EnableWebMvc 注解。这个注解也会导致 Spring Boot 的 MVC 自动配置被禁用。

通过采用上述方法之一,你可以解决 WebMvcAutoConfigurationWebMvcConfigurationSupport 冲突的问题,并确保 Spring Boot 的自动配置可以按预期工作。