使用不常见 getter 方法名称的序列化中的 Jackson 命名约定问题

Jackson naming convention issue in serialization with uncommon getter method name

java 和 spring 启动的新功能。

尝试序列化以下 class、

public class ActionItems {

private String APpID; 

public String getAPpID() {
    return APpID;
}

public void setAPpID(String aPpID) {
    APpID = aPpID;
}

// other fields
}

得到 json 字符串作为

{
"appID": null,     
}

同时,使用 decapitilize() 交叉检查 getter 名称,它与字段名称匹配。

Introspector.decapitalize("APpID") - gives "APpID"

jackson 在从 getter 方法生成 属性 名称时是否使用了一组不同的规则和方法?

PS: 我知道,变量名应该以小写开头。在查看 java beans 命名约定规范时遇到了这个问题。

我用的是jackson 2.9.3v.

PS:根据link PropertyNamingStrategy,它应该生成 APPid 而不是 appId 对吗?

有人可以在这里提供一些意见吗?

谢谢。

在 Jackson 中,您可以自定义 PropertyNamingStrategy,并且

In absence of a registered custom strategy, default Java property naming strategy is used, which leaves field names as is, and removes set/get/is prefix from methods (as well as lower-cases initial sequence of capitalized characters).

此外,您可以自定义一个 属性 名称,例如:

@JsonProperty("APpID") // produce {"APpID":"s"}
public String getAPpID() {
    return APpID;
}