Java 将Jackson配置为使用SNAKE“U CASE”;“全球范围内”;弹簧护套2.0.0.M1中

Java 将Jackson配置为使用SNAKE“U CASE”;“全球范围内”;弹簧护套2.0.0.M1中,java,spring-boot,jackson,kotlin,spring-webflux,Java,Spring Boot,Jackson,Kotlin,Spring Webflux,我使用的是Spring Boot2.0.0.M1(因此Spring5.0.0.RC1)。我正在尝试将其配置为使用PropertyNamingStrategy.snakecasetragy.SNAKE\u CASE,但到目前为止我还没有工作 我试过: application.yml文件包含: spring: jackson: property-naming-strategy: SNAKE_CASE 配置Jackson2ObjectMapperBuilderbean: @Bean @

我使用的是Spring Boot
2.0.0.M1
(因此Spring
5.0.0.RC1
)。我正在尝试将其配置为使用
PropertyNamingStrategy.snakecasetragy.SNAKE\u CASE
,但到目前为止我还没有工作

我试过:

  • application.yml
    文件包含:

    spring:
      jackson:
        property-naming-strategy: SNAKE_CASE
    
  • 配置
    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
    }
    
    @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
    }
    
  • 配置
    ObjectMapper
    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
    }
    
    @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.snakecasetrangement::class)
    注释每个类,但这不是我的问题的解决方案

    还有其他选择吗


    这是我的
    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\u CASE
    application.yml
    中的设置就足够了。

    如下所示:

    spring-core
    模块提供了反应式
    编码器
    解码器
    契约,可实现与类型化对象之间的
    流量
    的序列化


    显然,和在配置的实例时,不会拾取由JacksonAutoConfiguration自动配置的
    ObjectMapper
    。这个问题已经在
    M3
    millestone中报告过,目前计划在
    M3中解决。

    如果我用Spring boot和
    Spring boot starter web设置了一个简单的项目,并且版本为2.0.0.M1,那么选项1对我来说运行良好。您确定自己没有在某处创建Jackson
    ObjectMapper
    bean吗?看起来WebFlux模块有“问题”;它的目标是
    M3
    …我可以等待:)确实如此;它看起来要到
    M3
    才能修复…谢谢!。。。它实际上是固定在M3上的(希望是在wards上)。