2017-06-16 9 views
1

私はスプリングブート2.0.0.M1(したがって、スプリング5.0.0.RC1)を使用しています。 PropertyNamingStrategy.SnakeCaseStrategy.SNAKE_CASEを使用するように設定しようとしていますが、これまでのところ動作しません。スプリングブート2.0.0.M1でSNAKE_CASEを「グローバルに」使用するようにジャクソンを設定してください。

私が試した

  1. application.ymlファイル:

    ObjectMapper豆の設定

    @Bean 
    @Primary 
    open fun jacksonBuilder(): Jackson2ObjectMapperBuilder { 
        val jacksonMapperBuilder = Jackson2ObjectMapperBuilder() 
         .failOnUnknownProperties(false) 
         .modules(JavaTimeModule(), KotlinModule()) 
         .propertyNamingStrategy(PropertyNamingStrategy.SnakeCaseStrategy.SNAKE_CASE) 
        logger.info { "Jackson2ObjectMapperBuilder configured successfully..." } 
        return jacksonMapperBuilder 
    } 
    
  2. spring: 
        jackson: 
        property-naming-strategy: SNAKE_CASE 
    
  3. Jackson2ObjectMapperBuilder豆の設定

    @Bean 
    @Primary 
    open fun objectMapper(): ObjectMapper { 
        val objectMapper = ObjectMapper() 
        objectMapper.registerModule(JavaTimeModule()) 
        objectMapper.registerModule(KotlinModule()) 
        objectMapper.setPropertyNamingStrategy(PropertyNamingStrategy.SnakeCaseStrategy.SNAKE_CASE) 
        logger.info { "ObjectMapper configured successfully..." } 
        return objectMapper 
    } 
    

私はそれが@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy::class)で、すべて単一のクラスに注釈を付けることによってそれを動作させるために見つけた唯一の方法...それは私の場合のための解決策ではありません。

他のオプションはありますか?


これはdependencies "セクションには、" 私のbuild.gradle.ktsファイルにあります。

dependencies { 
    compile("com.fasterxml.jackson.datatype:jackson-datatype-jsr310") 
    compile("com.fasterxml.jackson.module:jackson-module-kotlin") 
    compile("io.github.microutils:kotlin-logging:1.4.4") 
    //compile("io.projectreactor:reactor-kotlin-extensions") 
    compile("org.springframework.boot:spring-boot-starter-actuator") 
    compile("org.springframework.boot:spring-boot-starter-data-mongodb-reactive") 
    compile("org.springframework.boot:spring-boot-starter-webflux") 
    compile(kotlin("stdlib")) 

    testCompile("io.projectreactor.addons:reactor-test") 
    testCompile("org.springframework.boot:spring-boot-starter-test") 
} 

UPDATE:これは確かにM3に固定し

SnakeCaseStrategy.SNAKE_CASEが必要な場合は、application.ymlの設定で十分です。 Web-Flux module documentation状態として

+0

バージョン2.0.0.M1のSpringブートと 'spring-boot-starter-web'という単純なプロジェクトを設定すると、オプション1はうまく動作します。ジャクソン 'ObjectMapper'ビーンをあなた自身のどこかで作成していないと確信していますか? – g00glen00b

+1

WebFluxモジュールで「問題」のように見えます。それは 'M3'をターゲットにしています...私は待つことができます:) –

答えて

3

spring-coreモジュールは、型付きオブジェクトへとからバイトのFluxのシリアル化を可能に反応EncoderDecoder契約を提供します。 Jackson2JsonEncoderのインスタンスを設定するときJacksonAutoConfigurationによって

どうやら自動的に設定ObjectMapperWebFluxAutoConfigurationWebFluxConfigurationSupportによってピックアップされることはありません。この問題は既にhereで報告されており、現在はM3の予定です。

+0

確かに;それは 'M3'まで固定されないようですね...ありがとう! –

+1

...それは実際には 'M3'(とうまくいけばオンワード)に固定されています。 –

関連する問題