Как использовать WebMvcConfigurationSupport из собственной автоконфигурации
Я хотел бы добавить Converter
через FormattingConversionService
, что требует наличия расширения класса @Configuration WebMvcConfigurationSupport
:
@Configuration
public class WebAutoConfig extends WebMvcConfigurationSupport {
@Override
public FormattingConversionService mvcConversionService() {
FormattingConversionService fcs = super.mvcConversionService();
// add Enum converter in order to accept enums
// case insensitively over Rest:
fcs.addConverter(
String.class,
MyEnum.class,
new EnumCaseInsensitiveConverter<>( MyEnum.class )
);
return fcs;
}
}
Он прекрасно работает, когда @Configuration используется непосредственно из проекта, но есть необходимость добавить эту логику в нашу собственную boot-starter
поэтому не было бы необходимости дублировать код во всех проектах.
Проблема в том, что когда @Configuration переносится в начальный проект, то
mvcConversionService()
не выполняется, и- Маршрутизация RestControllers нарушена (т.е. никакие запросы не отображаются правильно).
Как подойти к этому? Примечание с помощью WebMvcConfigurationSupport
это не жесткое требование. Как видно из выдержки из кода, конечная цель состоит в том, чтобы сконфигурировать определенные перечисления, чтобы они принимались без учета регистра остальными контроллерами.
Редактировать: следует добавить, что проект автоконфигурации настроен правильно, как и другие @Configuration
классы в том же пакете, что и WebAutoConfig.java
выполняем. Думаю, что проблема связана с расширением классов конфигурации WebMvcConfigurationSupport
(или же WebMvcConfigurerAdapter
в этом отношении) обрабатываются из автоконфигов.
Edit2: единственный способ, которым мне удалось получить работу, - это расширение класса config из проекта using:
import myautoconfproject.autoconfigure.WebAutoConfiguration;
@Configuration
public class WebConfiguration extends WebAutoConfiguration {
}
Но это больше не автоматическая конфигурация.
2 ответа
Видимо я ошибался насчет WebMvcConfigurerAdapter
- тот подхватывается автоконфигурацией:
@Configuration
public class WebAutoConfig extends WebMvcConfigurerAdapter {
@Override
public void addFormatters( final FormatterRegistry registry ) {
registry.addConverter(
String.class,
MyEnum.class,
new EnumCaseInsensitiveConverter<>( MyEnum.class )
);
}
}
Чтобы ваша конфигурация автоматически подбиралась для проектов, включающих ваш проект в качестве зависимости, вам нужно добавить файл META-INF/spring.factories
в ваш classpath (в проекте, где WebAutoConfig
ложь и добавить строки
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
your.package.WebAutoConfig