WebMvcAutoConfiguration conflict with WebMvcConfigurationSupport. WebMvcConfigurerAdapterAutoConfiguration and WebMvcAutoConfiguration’s setting will maybe invalid when use WebMvcConfigurationSupport and it’s subclass
这个错误信息表明你在 Spring Boot 应用中同时使用了 WebMvcAutoConfiguration
和 WebMvcConfigurationSupport
,这导致了一个冲突。在 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 自动配置被禁用。
通过采用上述方法之一,你可以解决 WebMvcAutoConfiguration
与 WebMvcConfigurationSupport
冲突的问题,并确保 Spring Boot 的自动配置可以按预期工作。