簡體   English   中英

如何通過自己的自動配置使用WebMvcConfigurationSupport

[英]How to use WebMvcConfigurationSupport from own auto-configuration

我想通過FormattingConversionService添加Converter ,它需要具有擴展WebMvcConfigurationSupport的@Configuration類:

@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並不是硬性要求。 從代碼摘錄中可以看出,最終目標是將某些枚舉配置為由其余控制器不區分大小寫地接受。

編輯 :應添加正確的自動配置項目,因為與WebAutoConfig.java相同的程序包中的其他@Configuration類正在執行。 認為問題與如何從自動配置中處理擴展WebMvcConfigurationSupport (或WebMvcConfigurerAdapter )的配置類有關。

Edit2 :到目前為止,我設法工作的唯一方法是從使用項目擴展config類:

import myautoconfproject.autoconfigure.WebAutoConfiguration;

@Configuration
public class WebConfiguration extends WebAutoConfiguration {
}

但這不再是真正的自動配置。

為了使包含項目作為依賴項的項目的配置自動被獲取,您需要將文件META-INF/spring.factories到類路徑(在WebAutoConfig所在的項目中,並添加以下行)

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

顯然我在WebMvcConfigurerAdapter錯了-自動配置選擇了一個:

@Configuration
public class WebAutoConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addFormatters( final FormatterRegistry registry ) {

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM