我的 JSON 序列化中的 "target" 属性来自哪里?

Where do the "target" properties in my JSON serialization come from?

我有一个 spring 引导服务,使用 MongoDB 作为我的 bean 的存储库。我添加了一个功能来下载 JSON 格式的 bean 并将其上传到另一个系统(或者只是为了备份文件)。

我正在使用 ObjectMapperwriteValueAsString 方法。这一切都按预期工作,除了有一些不属于我的 bean 的附加属性。

@DBRef 定义的所有属性因此指向 MongoDB 中的其他 bean 有一个 target 属性 包含完全相同的序列化 bean。例如:我跟踪通过 GUI 创建 bean 的用户:

{
    createdBy: {
        id: "5bb743feacbd6505304c025e",
        username: "admin",
        target: {
            id: "5bb743feacbd6505304c025e",
            username: "admin"
        }
    }
}

这个 target 是从哪里来的,有没有办法在 JSON 中摆脱它?

来自

The Target field is added by Spring Data because it is a lazy collection. So it is like datahandler etc. in Hibernate for JPA.

Option1: To ignore them you just have to add @JsonIgnoreProperties(value = { "target" }) on class level

@Document(collection = "song")
@JsonIgnoreProperties(value = { "target" })
public class Song {
 ...
}

Option2: Make the Collection not lazy

选项 3:创建您自己的 DBRef 序列化程序,如 Spring Data Mongo + Lazy Load + REST Jackson

所述