gpt4 book ai didi

java - 在子类中重写@JsonIgnore

转载 作者:搜寻专家 更新时间:2023-10-31 08:32:10 28 4
gpt4 key购买 nike

我有以下抽象类:

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com