【问题标题】:Spring Boot MVC Autoconfiguration Blocked by WebMvcConfigurationSupportWebMvcConfigurationSupport 阻止了 Spring Boot MVC 自动配置
【发布时间】:2021-06-29 13:56:07
【问题描述】:

我有一个库 JAR,它利用 Spring Boot 自动配置来注册一个拦截器以进行日志记录。

我的问题是,当我将库作为依赖项添加到特定的 Spring Boot 项目中时,拦截器没有注册。它适用于我们所有其他 Spring Boot 项目。

在调试模式下我的库代码中没有一个断点被命中。

问题 Spring Boot 项目确实有 @SpringBootApplication 并且通过 spring-boot-starter-web 有 Spring MVC。

这个扩展 WebMvcConfigurationSupport 的类似乎阻止了我的拦截器被注册:

@Configuration
public class JacksonHttpMessageConfig extends WebMvcConfigurationSupport
{

    @Bean
    public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
        MappingJackson2HttpMessageConverter jsonConverter = new MappingJackson2HttpMessageConverter();
        ObjectMapper om = new ObjectMapper();
        om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        om.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true);
        jsonConverter.setObjectMapper(om);
        return jsonConverter;
    }

    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.add(mappingJackson2HttpMessageConverter());
        super.addDefaultHttpMessageConverters(converters);
    }

}

当我删除这个类时,拦截器注册成功。

为什么会发生这种情况以及解决方法是什么?

【问题讨论】:

  • 如果您将属性 debug=true 添加到您的应用程序中,则会打印出自动配置报告,其中应显示所有已注册的自动配置以及它们被触发和未被触发的原因
  • @DarrenForsyInterceptorConfig 类确实出现在报告中标题为“无条件类”的部分下

标签: java spring-boot spring-mvc


【解决方案1】:

如果我理解正确,您正试图在另一个 spring-boot 模块中包含一个 spring-boot 模块。这不起作用,因为 Spring Boot 模块的编译和打包方式意味着您不能将其视为库。

要解决这种情况,您需要创建一个新的库模块,并将您想在其他模块中使用的代码提取到这个新模块中。

【讨论】:

  • 包含用于自动配置的 Spring Boot 注释的库 JAR 当然可以作为依赖项包含在 Spring Boot 项目中。这就是所有启动项目的工作方式。
  • 听起来@kernelpanic 可能正在尝试在 SpringBootApplication 中使用 SpringBootApplication,但并不太清楚。
【解决方案2】:

我发现问题在于 Spring Boot 在看到扩展 WebMvcConfigurationSupport@Configuration 类时禁用 MVC 组件的自动配置。

解决方案是让类不扩展 WebMvcConfigurationSupport

【讨论】:

    【解决方案3】:

    您可以尝试implements WebMvcConfigurer 而不是extends WebMvcConfigurationSupport

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 2017-01-19
      • 2018-09-09
      • 2018-09-06
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      相关资源
      最近更新 更多