配置Jackson以使用SNAKE_CASE"全球"在Spring Boot 2.0.0.M1中

时间:2017-06-16 02:29:52

标签: java spring-boot jackson kotlin spring-webflux

我使用Spring Boot 2.0.0.M1(因此是Spring 5.0.0.RC1)。我试图将其配置为使用PropertyNamingStrategy.SnakeCaseStrategy.SNAKE_CASE,但到目前为止我还没有工作。

我试过了:

  1. application.yml文件:

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

    @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:

    @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
    }
    
  4. 我通过使用@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")
    }
    

    更新

    这确实在M3上确定;如果您需要SnakeCaseStrategy.SNAKE_CASE application.yml中的设置就足够了。

1 个答案:

答案 0 :(得分:3)

正如Web-Flux module documentation所述:

  

spring-core模块提供了被动EncoderDecoder合同,这些合同允许将Flux个字节序列化为类型化对象。

显然,在配置WebFluxAutoConfiguration的实例时,WebFluxConfigurationSupportJackson2JsonEncoder将无法选择ObjectMapper JacksonAutoConfiguration自动配置的M3。此问题已在here中报告,目前已计划用于{{1}}里程碑。