spring Boot objectMapper忽略第二个小写字母

nqwrtyyt  于 2023-10-15  发布在  Spring
关注(0)|答案(1)|浏览(110)

我用的是Sping Boot 2.7.15
我使用的objectMapper是由Jackson2ObjectMapperBuilder(spring-web:5.3.29)创建的。
我尝试了objectMapper.writeValueAsString与下面的类

data class SomeClass(
  val oAuthClientType: String,
  // ...
)

但结果如下

{"oauthClientType": "SOME_TYPE"}

为什么第二个字母A大写被忽略?
这是窃听器吗

btxsgosb

btxsgosb1#

不是一个bug,而是Jackson的ObjectMapper的默认命名方案导致了您看到的行为。默认情况下,Jackson使用PropertyNamingStrategy命名方案.SNAKE_CASE,它将camelCase(或PascalCase)属性名称更改为snake_case。Snake_case将小写字符转换为小写字符,并使用下划线分隔单词。
因为第二个字符“A”在您的情况下被更改为字符“a”,并且单词没有用下划线分隔,所以属性oAuthClientType被转换为“oauthClientType”。

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;

// Create a custom ObjectMapper with the desired naming strategy
ObjectMapper objectMapper = Jackson2ObjectMapperBuilder.json()
    .propertyNamingStrategy(PropertyNamingStrategy.LOWER_CAMEL_CASE) // Use LOWER_CAMEL_CASE
    .build();

当使用此选项序列化为JSON时,属性名称oAuthClientType将保持原样。
请确保应用程序的命名策略符合您的首选名称约定,因为更改它将影响JSON对象中所有属性的序列化方式。

相关问题