【问题标题】:Where do the "target" properties in my JSON serialization come from?我的 JSON 序列化中的“目标”属性来自哪里?
【发布时间】:2019-03-07 15:45:22
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: json jackson mapping spring-mongodb


    【解决方案1】:

    来自Java to JSON serialization with Jackson PTH and Spring Data MongoDB DBRef generates extra target property

    Target 字段是 Spring Data 添加的,因为它是惰性的 收藏。所以它就像 Hibernate for JPA 中的数据处理程序等。

    选项1:要忽略它们,您只需添加 @JsonIgnoreProperties(value = { "target" }) 班级级别

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

    选项2:使集合不惰性

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

    【讨论】:

    • 谢谢,我找的时候没找到这个问题和答案
    猜你喜欢
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 2017-04-06
    • 2018-09-12
    相关资源
    最近更新 更多