java - 在子类中重写@JsonIgnore

标签 java inheritance jackson

我有以下抽象类:

public abstract class StandardTimeStamp {

  @Temporal(TemporalType.TIMESTAMP)
  @Column(nullable = false)
  @JsonIgnore
  private Date lastUpdated;

  @PreUpdate
  public void generatelastUpdated() {
    this.lastUpdated = new Date();
  }

  public Date getLastUpdated() {
    return lastUpdated;
  }

  public void setLastUpdated(Date lastUpdated) {
    this.lastUpdated = lastUpdated;
  }
}

我有一个子类实体,我需要在其中将 lastUpdate 值发送到浏览器,因此我需要覆盖 @JsonIgnore。我尝试了一些方法,以下代码就是其中之一:

public class MyEntity extends StandardTimestamp implements Serializable {

  @Column(name = "LastUpdated")
  private Date lastUpdated;

  @JsonIgnore(false)
  @Override
  public Date getLastUpdated() {
    return lastUpdated;
  }
}

这确实在 JSON 响应中添加了 lastUpdated 属性,但是当它在数据库中不为 null 时,它的值为 null。我在子类中有其他 Dates 可以工作,但它们没有被父类(super class)中的 @IgnoreJson 隐藏。

有什么想法吗?

最佳答案

您将使用此声明引入名为 lastUpdated 的第二个字段

@Column(name = "LastUpdated")
private Date lastUpdated;

在您的子类型 MyEntity 中。我不确定数据库映射器如何处理这个问题,但对我来说这似乎是多余的。

我可以看到两个选项。

第一,去掉这个新字段,让重写的 getLastUpdated 方法委托(delegate)给它的 super 实现。例如

@Override
@JsonIgnore(false)
@JsonProperty
public Date getLastUpdated() {
    return super.getLastUpdated();
}

序列化MyEntity 对象时,Jackson 将通过此访问器lastUpdated 发现一个属性,并使用它生成JSON。它最终将从父类(super class)中检索它。

二、使用类注解@JsonIgnoreProperties标记父类(super class)中被忽略的属性

@JsonIgnoreProperties("lastUpdated")
abstract class StandardTimeStamp {

然后清除(或添加不同的值)子类中的“列表”

@JsonIgnoreProperties()
class MyEntity extends StandardTimeStamp implements Serializable {

Jackson 只会使用子类上的注解(如果存在),而忽略父类(super class)上的注解。

关于java - 在子类中重写@JsonIgnore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37074711/

相关文章:

java - Spring 测试中未调用方面

python - 派生类无法识别父类方法的参数

html - 如何调整 <a> 元素内的文本悬停颜色?

java - 当它也是默认的网络应用程序时,如何在网络应用程序的 context.xml 中设置上下文变量?

Java 按同一字段对项目进行两次排序

java - Jackson Objectmapper 读取具有可变字段/值类型的对象

java - 将固定大小的 Map 序列化为 CBOR

serialization - 我可以在 RestEasy 中指定用于方法结果转换的 jackson @JsonView 吗?

java - 为什么是-XX :ReservedCodeCacheSize not getting applied?

java - 创建新对象时扩展类问题