配置 Jackson 在 Spring Boot 2.0.0.M1 中使用 SNAKE_CASE "globally"
Configure Jackson to use SNAKE_CASE "globally" in Spring Boot 2.0.0.M1
我正在使用 Spring 启动 2.0.0.M1
(因此 Spring 5.0.0.RC1
)。我正在尝试将其配置为使用 PropertyNamingStrategy.SnakeCaseStrategy.SNAKE_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
}
配置一个 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
}
我发现使它工作的唯一方法是用 @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy::class)
注释每个 class...但这不是我的情况的解决方案。
还有其他选择吗?
这是我的 build.gradle.kts
文件中的 dependencies
"section":
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
中的设置就足够了。
如 Web-Flux module documentation 所述:
The spring-core
module provides reactive Encoder
and Decoder
contracts that enable the serialization of a Flux
of bytes to and from typed objects.
显然 JacksonAutoConfiguration
自动配置的 ObjectMapper
不会被 WebFluxAutoConfiguration
and WebFluxConfigurationSupport
when configuring an instance of Jackson2JsonEncoder
. This issue already reported in here 使用,目前计划用于 M3
里程碑。
我正在使用 Spring 启动 2.0.0.M1
(因此 Spring 5.0.0.RC1
)。我正在尝试将其配置为使用 PropertyNamingStrategy.SnakeCaseStrategy.SNAKE_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 }
配置一个
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 }
我发现使它工作的唯一方法是用 @JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy::class)
注释每个 class...但这不是我的情况的解决方案。
还有其他选择吗?
这是我的 build.gradle.kts
文件中的 dependencies
"section":
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
中的设置就足够了。
如 Web-Flux module documentation 所述:
The
spring-core
module provides reactiveEncoder
andDecoder
contracts that enable the serialization of aFlux
of bytes to and from typed objects.
显然 JacksonAutoConfiguration
自动配置的 ObjectMapper
不会被 WebFluxAutoConfiguration
and WebFluxConfigurationSupport
when configuring an instance of Jackson2JsonEncoder
. This issue already reported in here 使用,目前计划用于 M3
里程碑。