杰克逊是否将属性的第二个字符反序列化为小写

Nam*_*man 0 java json jackson deserialization fasterxml

我们在服务代码中将模型定义为-

@JsonSerialize(include = JsonSerialize.Inclusion.NON_NULL)
public class SomeData {

    public boolean tnAvailable;

    @NonNull
    public String sTempChange;

    public boolean isTnAvailable() {
       return faAvailable;
    }

    public void setTnAvailable(boolean faAvailable) {
        this.faAvailable = faAvailable;
    }

    @Nonnull
    public String getSTempChange() {
        return sTempChange;
    }

    public void setSTempChange(@Nonnull String sTempChange) {
        this.sTempChange = sTempChange;
    }

}
Run Code Online (Sandbox Code Playgroud)

当查询包含上述模型的api作为响应时,我们得到的响应为-

"someData": {
    "tnAvailable": true,
    "stempChange": "trial_001"
}
Run Code Online (Sandbox Code Playgroud)

使我们感到惊讶的是stempChange(注意小写t)而不是sTempChange响应的属性。

在API调用期间对对象进行序列化和反序列化时,怀疑原因是Jackson com.fasterxml.jackson.core:jackson-core:2.5.2,因为我们没有使用任何其他getter-setter ot包装器来更改属性。为什么会发生这种情况,并且序列化/反序列化是寻找此结果的正确方向?

编辑 -从@Windle发表的评论中,尝试解释这里的不同之处。我再次重申: “尽管那里的问题在很大程度上与相同的情况有关。但是我也期待在fastxml中实现和编写文档的原因。”

Riz*_*wan 5

在getter / setter中处理多个前导大写字母(例如“ getURL()”或“ getFName()”)。默认情况下,Jackson会简单地将所有前导大写字母都小写,并给出“ url”和“ fname”。但是,如果启用了MapperFeature.USE_STD_BEAN_NAMING(在Jackson 2.5中添加),它将遵循Java Bean命名约定,这只是小写一个大写的前导字母。如果找到多个,则不执行任何操作。这将导致属性“ URL”和“ FName”。