2017-06-16 81 views
1

我使用Spring Boot 2.0.0.M1(因此Spring 5.0.0.RC1)。我試圖將其配置爲使用PropertyNamingStrategy.SnakeCaseStrategy.SNAKE_CASE,但目前爲止我還沒有工作。配置Jackson在Spring Boot 2.0.0中使用SNAKE_CASE「全局」2.0.0.M1

我已經試過:

  1. application.yml文件有:

    spring: 
        jackson: 
        property-naming-strategy: SNAKE_CASE 
    
  2. 配置Jackson2ObjectMapperBuilder豆:

    @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 
    } 
    
  3. 配置ObjectMapper豆:

    @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中的設置已足夠。

+0

如果我使用2.0.0.M1版本的Spring引導和'spring-boot-starter-web'設置了一個簡單項目,選項1對我來說工作得很好。你確定你不是自己創建一個Jackson'ObjectMapper' bean嗎? – g00glen00b

+1

WebFlux模塊看起來像一個「問題」;它的目標是'M3' ...我可以等待:) –

回答

3

作爲Web-Flux module documentation狀態:

spring-core模塊提供反應性EncoderDecoder合同,使字節和從類型對象的Flux的序列化。

顯然,自動配置ObjectMapper通過JacksonAutoConfiguration將不會由WebFluxAutoConfigurationWebFluxConfigurationSupport配置的Jackson2JsonEncoder實例時拾起。此問題已在here中報告,目前計劃爲M3里程碑。

+0

確實;它看起來不會被修復,直到'M3' ...謝謝! –

+1

...它實際上固定在'M3'上(並且有希望進入病房)。 –

相關問題