代码之家  ›  专栏  ›  技术社区  ›  laur

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

  •  0
  • laur  · 技术社区  · 7 年前

    我想补充一点 Converter s通过 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;
        }
    }
    

    boot-starter 因此,不需要在所有项目中重复代码。

    问题是,当这个@配置迁移到启动项目时,然后

    • mvcConversionService() 未执行,以及
    • RESTController路由已中断(即没有正确映射任何请求)。

    如何解决这个问题?注释使用 这不是一个硬性要求。从代码摘录中可以看出,最终目标是将某些枚举配置为由rest控制器不区分大小写地接受。

    编辑 @Configuration 与相同包中的类 WebAutoConfig.java 正在执行。认为问题与配置类如何扩展有关 WebMVC配置支持 (或 WebMvcConfigurerAdapter 因此)正在从自动配置中处理。

    编辑2 :到目前为止,我设法开始工作的唯一方法是从using项目扩展config类:

    import myautoconfproject.autoconfigure.WebAutoConfiguration;
    
    @Configuration
    public class WebConfiguration extends WebAutoConfiguration {
    }
    

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

    2 回复  |  直到 7 年前
        1
  •  0
  •   msp albert muda    7 年前

    为了使您的配置能够自动获取包含您的项目作为依赖项的项目的配置,您需要添加该文件 META-INF/spring.factories 到您的类路径(在项目中 WebAutoConfig 谎言和添加线条

    org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
    your.package.WebAutoConfig
    
        2
  •  0
  •   laur    7 年前

    显然我错了 WebMvcConfigurerAdapter

    @Configuration
    public class WebAutoConfig extends WebMvcConfigurerAdapter {
    
        @Override
        public void addFormatters( final FormatterRegistry registry ) {
    
            registry.addConverter(
                    String.class,
                    MyEnum.class,
                    new EnumCaseInsensitiveConverter<>( MyEnum.class )
            );
        }
    }