0

我想添加Converters via 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:到目前为止,我设法开始工作的唯一方法是从 using 项目扩展配置类:

import myautoconfproject.autoconfigure.WebAutoConfiguration;

@Configuration
public class WebConfiguration extends WebAutoConfiguration {
}

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

4

2 回答 2

0

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

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
your.package.WebAutoConfig
于 2017-09-28T09:00:53.567 回答
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 )
        );
    }
}
于 2017-09-28T11:56:02.010 回答