2017-06-16 611 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'上(并且有希望进入病房)。 –

相关问题