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);