JSON序列化中的“目标”属性从何而来?

时间:2019-03-07 15:45:22

标签: json jackson mapping spring-mongodb

我有一个使用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中消除它?

1 个答案:

答案 0 :(得分:2)

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

  

“目标”字段是由Spring Data添加的,因为它很懒   采集。因此就像Hibernate for JPA中的datahandler等。

     

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

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

选项2:使集合不懒惰

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

所述