有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我想通过FormattingConversionService添加Converter,这需要有一个@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()未执行,并且
  • RESTController路由已中断(即没有正确映射请求)

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

Edit:应该补充的是,自动配置项目设置正确,因为与WebAutoConfig.java相同包中的其他@Configuration类正在执行。我认为这个问题与如何从自动配置中处理扩展WebMvcConfigurationSupport(或WebMvcConfigurerAdapter)的配置类有关

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

import myautoconfproject.autoconfigure.WebAutoConfiguration;

@Configuration
public class WebConfiguration extends WebAutoConfiguration {
}

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


共 (1) 个答案

  1. # 1 楼答案

    显然,我对WebMvcConfigurerAdapter的看法是错误的——这一个是通过自动配置获取的:

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