spring boot objectMapper 忽略第二个大写字母

问题描述 投票:0回答:1

我正在使用Spring Boot 2.7.15
我使用的 objectMapper 是由

Jackson2ObjectMapperBuilder
(spring-web:5.3.29) 创建的。

我在下面的课程中尝试了

objectMapper.writeValueAsString

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

但是结果如下

{"oauthClientType": "SOME_TYPE"}

为什么第二个字母

A
大写被忽略?
这是bug吗?

json spring spring-boot objectmapper
1个回答
0
投票

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 对象中所有属性的序列化方式。

© www.soinside.com 2019 - 2024. All rights reserved.