【发布时间】: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