我有以下抽象类:
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/