【问题标题】:ignoring calculated fields in deserialization忽略反序列化中的计算字段
【发布时间】:2012-05-10 21:36:16
【问题描述】:

我有一门课:

class MyClass {
  @Getter
  @Setter
  int a;

  @Getter
  @Setter
  int b;

  public int getADivB() {
    return a / b;
  }
}

序列化时,我需要序列化所有三个属性。但是,如果另一个 java 进程正在反序列化消息,我希望杰克逊忽略计算的字段。 (不要像@JSONIgnore 一样忽略它)

反序列化代码为:

String json = ... //get json from message
JsonNode root = this.mapper.readTree(json);
MyClass abdiv = this.mapper.readValue(root, MyClass.class);

【问题讨论】:

  • 我只看到两个字段,第三个在哪里?

标签: java json jackson pojo


【解决方案1】:

您需要用@JsonProperty 注释计算的属性 所以它看起来像这样:

class MyClass {
  @Getter
  @Setter
  int a;

  @Getter
  @Setter
  int b;

  @JsonProperty
  public int getADivB() {
    return a / b;
  }
}

【讨论】:

    【解决方案2】:

    你可以用

    注释你的类
    @JsonIgnoreProperties(ignoreUnknown = true)
    

    让 Jackson 在反序列化期间忽略该属性。

    【讨论】:

      【解决方案3】:

      序列化不会序列化方法中的a/b,只会序列化成员字段

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-27
        • 1970-01-01
        • 1970-01-01
        • 2018-07-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多