Nic*_*wyn 5 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;
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个实体是一个子类,我需要将lastUpdate值发送到浏览器,所以我需要覆盖@JsonIgnore.我尝试过一些东西,下面的代码就是其中之一:
public class MyEntity extends StandardTimestamp implements Serializable {
@Column(name = "LastUpdated")
private Date lastUpdated;
@JsonIgnore(false)
@Override
public Date getLastUpdated() {
return lastUpdated;
}
}
Run Code Online (Sandbox Code Playgroud)
这确实在JSON响应上添加了lastUpdated属性,但是当它在数据库中不为null时,其值为null.我在子类中有其他日期可以工作,但它们不会被超类中的@IgnoreJson隐藏.
有什么想法吗?
Sot*_*lis 10
您将引入lastUpdated以此声明命名的第二个字段
@Column(name = "LastUpdated")
private Date lastUpdated;
Run Code Online (Sandbox Code Playgroud)
在你的子类型中MyEntity.我不确定数据库映射器如何处理这个问题,但对我来说这似乎是多余的.
我可以看到两个选项.
一,摆脱这个新领域,让你的override getLastUpdated方法委托给它的超级实现.例如
@Override
@JsonIgnore(false)
@JsonProperty
public Date getLastUpdated() {
return super.getLastUpdated();
}
Run Code Online (Sandbox Code Playgroud)
在序列化MyEntity对象时,Jackson将通过此访问器发现单个属性lastUpdated,并使用它来生成JSON.它最终将从超类中检索它.
二,使用类注释@JsonIgnoreProperties标记超类中被忽略的属性
@JsonIgnoreProperties("lastUpdated")
abstract class StandardTimeStamp {
Run Code Online (Sandbox Code Playgroud)
然后清除(或添加不同的值)子类中的"list"
@JsonIgnoreProperties()
class MyEntity extends StandardTimeStamp implements Serializable {
Run Code Online (Sandbox Code Playgroud)
Jackson只会在子类上使用注释(如果它存在),并忽略超类上的注释.
| 归档时间: |
|
| 查看次数: |
4345 次 |
| 最近记录: |