【发布时间】:2022-01-03 02:46:28
【问题描述】:
我已经使用 Jackson 多年,但我不确定我是否遇到过这个问题。
在 Spring Boot 2.5.5 项目中使用 Jackson 2.12.5,我有一个需要序列化的对象。我对其他字段没有问题,但这两个字段给我带来了问题:
@Jacksonized
@Builder
@Getter
public class ComputationResult {
private final String pId;
private final String cId;
... other fields ignored
}
如您所见,我也在使用 Lombok 注释。当“delombokized”时,吸气剂是:
public String getPId() {
return this.pId;
}
public String getCId() {
return this.cId;
}
在序列化 POJO 时,我希望字段名称是“pId”和“cId”,但它们不是:我得到的“pid”和“cid”都是小写的。我在其他领域没有问题,对此情况予以尊重。
这给我带来了一个问题,因为我需要对 POJO 进行序列化然后反序列化,而反序列化失败是因为它无法将“cid”json 字段映射到“cId”java 字段。
有各种解决方法(我在现场使用@JsonAlias("cid") 来允许反序列化),但我很困惑:这是杰克逊的预期行为吗?它是否根据字符串的长度以不同的方式处理字符串字段?还是我不知道的 java bean 约定?
是否有要在 objectMapper 中设置的属性来“修复”行为,而不实现我自己的 com.fasterxml.jackson.databind.PropertyNamingStrategy ?
【问题讨论】:
标签: java spring-boot jackson jackson-databind