Jackson 是否为未定义的字段序列化 getter 属性?
Does Jackson serialize getter property for an undefined field?
我有一个 class,其中包含以下字段及其各自的 getter,以及一个附加方法 getTotalBalance
,除了自定义实现之外我没有任何字段。
public class demo{
private String balance;
private String blockedBalace;
private String futureBalance;
private String availableBalance;
//getters for previous fields
public String getTotalBalance(){
//something..
}
当我序列化此 class 的对象时,我得到以下 JSON 输出。
{
"balance": "12.30",
"blockedBalance":"23.45",
"futureBalance" :"56.22",
"availableBalance" :"12.30",
"totalBalance" : "34.11"
}
即使我没有为 totalBalance
声明一个字段,我最终还是序列化了这个。怎么可能?
Jackson(默认情况下)不关心字段。它会简单地序列化 getter 提供的所有内容,并使用匹配的 setter 反序列化所有内容。那些 getters/setters 所做的并不重要。
不过请注意,关于 Jackson 的每一件小事都可以进行深度定制和配置,所以我只谈论默认设置。
Jackson 默认使用 getters 进行序列化,使用 setter 进行反序列化。
您可以在 getter 方法上使用 @JsonIgnore
来忽略它,或者您可以将对象映射器配置为仅使用 serialization/des:
的字段
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE);
objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
我有一个 class,其中包含以下字段及其各自的 getter,以及一个附加方法 getTotalBalance
,除了自定义实现之外我没有任何字段。
public class demo{
private String balance;
private String blockedBalace;
private String futureBalance;
private String availableBalance;
//getters for previous fields
public String getTotalBalance(){
//something..
}
当我序列化此 class 的对象时,我得到以下 JSON 输出。
{
"balance": "12.30",
"blockedBalance":"23.45",
"futureBalance" :"56.22",
"availableBalance" :"12.30",
"totalBalance" : "34.11"
}
即使我没有为 totalBalance
声明一个字段,我最终还是序列化了这个。怎么可能?
Jackson(默认情况下)不关心字段。它会简单地序列化 getter 提供的所有内容,并使用匹配的 setter 反序列化所有内容。那些 getters/setters 所做的并不重要。
不过请注意,关于 Jackson 的每一件小事都可以进行深度定制和配置,所以我只谈论默认设置。
Jackson 默认使用 getters 进行序列化,使用 setter 进行反序列化。
您可以在 getter 方法上使用 @JsonIgnore
来忽略它,或者您可以将对象映射器配置为仅使用 serialization/des:
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.NONE);
objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);