序列化时如何创建虚拟JSON属性?
How to create a virtual JSON property when serializing?
我有这个摘要 class,它为我的实体提供了一些通用属性。以下为节选:
@MappedSuperclass
public class AbstractEntity implements Serializable {
@Id
@GeneratedValue
private long id;
@Temporal(value = TemporalType.TIMESTAMP)
@JsonProperty(access = Access.READ_ONLY)
private Date createdOn;
@Temporal(value = TemporalType.TIMESTAMP)
@JsonProperty(access = Access.READ_ONLY)
private Date modifiedOn;
⋮
}
将子class序列化为JSON时,我得到了预期的结果,例如,这是序列化的摘录:
{
"createdOn": "2016-12-11T15:35:23Z",
"modifiedOn": "2016-12-11T15:35:23Z",
⋮
}
我需要将这些公共属性序列化为 JSON 对象,这样上面的示例如下所示:
{
"_metadata": {
"createdOn": "2016-12-11T15:35:23Z",
"modifiedOn": "2016-12-11T15:35:23Z",
}
⋮
}
我已经尝试使用名为 Metadata
的 class 并且使用那种类型的 属性 效果很好。但我想知道是否有仅使用 Jackson 注释的更简单或更简单的方法?
您可以创建一个 JPA @Embeddable
class,您应该会得到所需的输出。不确定还有什么比这更简单。
可嵌入:
@Embeddable
public class MetaData{
@Temporal(value = TemporalType.TIMESTAMP)
@JsonProperty(access = Access.READ_ONLY)
private Date createdOn;
@Temporal(value = TemporalType.TIMESTAMP)
@JsonProperty(access = Access.READ_ONLY)
private Date modifiedOn;
}
实体:
@MappedSuperclass
public class AbstractEntity implements Serializable {
@Id
@GeneratedValue
private long id;
@Embedded
private Metadata metdata;
}
我有这个摘要 class,它为我的实体提供了一些通用属性。以下为节选:
@MappedSuperclass
public class AbstractEntity implements Serializable {
@Id
@GeneratedValue
private long id;
@Temporal(value = TemporalType.TIMESTAMP)
@JsonProperty(access = Access.READ_ONLY)
private Date createdOn;
@Temporal(value = TemporalType.TIMESTAMP)
@JsonProperty(access = Access.READ_ONLY)
private Date modifiedOn;
⋮
}
将子class序列化为JSON时,我得到了预期的结果,例如,这是序列化的摘录:
{
"createdOn": "2016-12-11T15:35:23Z",
"modifiedOn": "2016-12-11T15:35:23Z",
⋮
}
我需要将这些公共属性序列化为 JSON 对象,这样上面的示例如下所示:
{
"_metadata": {
"createdOn": "2016-12-11T15:35:23Z",
"modifiedOn": "2016-12-11T15:35:23Z",
}
⋮
}
我已经尝试使用名为 Metadata
的 class 并且使用那种类型的 属性 效果很好。但我想知道是否有仅使用 Jackson 注释的更简单或更简单的方法?
您可以创建一个 JPA @Embeddable
class,您应该会得到所需的输出。不确定还有什么比这更简单。
可嵌入:
@Embeddable
public class MetaData{
@Temporal(value = TemporalType.TIMESTAMP)
@JsonProperty(access = Access.READ_ONLY)
private Date createdOn;
@Temporal(value = TemporalType.TIMESTAMP)
@JsonProperty(access = Access.READ_ONLY)
private Date modifiedOn;
}
实体:
@MappedSuperclass
public class AbstractEntity implements Serializable {
@Id
@GeneratedValue
private long id;
@Embedded
private Metadata metdata;
}