我正在使用Spring Boot 2.7.15
我使用的 objectMapper 是由
Jackson2ObjectMapperBuilder
(spring-web:5.3.29) 创建的。
我在下面的课程中尝试了
objectMapper.writeValueAsString
data class SomeClass(
val oAuthClientType: String,
// ...
)
但是结果如下
{"oauthClientType": "SOME_TYPE"}
为什么第二个字母
A
大写被忽略?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 对象中所有属性的序列化方式。