如何从自己的自动配置中使用WebMvcConfigurationSupport

时间:2017-09-27 18:25:23

标签: java spring spring-boot spring-web spring-boot-starter

我想通过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注意并不是一项艰难的要求。从代码摘录中可以看出,最终目标是将某些枚举配置为由其他控制器不区分大小写地接受。

编辑:应该添加正确设置auto-config项目,因为正在执行与@Configuration相同的包中的其他WebAutoConfig.java类。认为问题与如何从自动配置处理WebMvcConfigurationSupport(或WebMvcConfigurerAdapter扩展的配置类有关。

Edit2 :到目前为止,我设法开始工作的唯一方法是从使用项目扩展配置类:

import myautoconfproject.autoconfigure.WebAutoConfiguration;

@Configuration
public class WebConfiguration extends WebAutoConfiguration {
}

但那不再是真正的自动配置了。

2 个答案:

答案 0 :(得分:0)

为了让包含项目作为依赖项的项目自动获取配置,您需要将文件META-INF/spring.factories添加到类路径中(在WebAutoConfig所在的项目中添加线

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
your.package.WebAutoConfig

答案 1 :(得分:0)

显然我对WebMvcConfigurerAdapter错了 - 自动配置选择了一个:

@Configuration
public class WebAutoConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addFormatters( final FormatterRegistry registry ) {

        registry.addConverter(
                String.class,
                MyEnum.class,
                new EnumCaseInsensitiveConverter<>( MyEnum.class )
        );
    }
}