序列化时如何创建虚拟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;
}