使用Jackson PTH和Spring Data MongoDB DBRef的Java到JSON序列化生成额外的目标属性

用户9353951:

从Java序列化为JSON时,target当使用@DBRef带有延迟加载和Jackson的多态类型处理的Spring Data MongoDB 批注,Jackson会为引用的实体生成一个额外的属性为什么会发生这种情况,并且可以省略多余的target属性?

代码示例

@Document(collection = "cdBox")
public class CDBox {
  @Id
  public String id;

  @DBRef(lazy = true)
  public List<Product> products;
}

@Document(collection = "album")
public class Album extends Product {
  @DBRef(lazy = true)
  public List<Song> songs;
}

@Document(collection = "single")
public class Single extends Product {
  @DBRef(lazy = true)
  public List<Song> songs;
}

@Document(collection = "song")
public class Song {
  @Id
  public String id;

  public String title;
}

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
                    property = "productType",
                    include = JsonTypeInfo.As.EXTERNAL_PROPERTY)
@JsonSubTypes(value = {
    @JsonSubTypes.Type(value = Single.class),
    @JsonSubTypes.Type(value = Album.class)
})
public abstract class Product {
  @Id
  public String id;
}

生成的JSON

{
  "id": "someId1",
  "products": [
    {
      "id": "someId2",
      "songs": [
        {
        "id": "someId3",
        "title": "Some title",
        "target": {
          "id": "someId3",
          "title": "Some title"
          }
        }
      ]
    }
  ]
}
弗朗兹·高尔克(Franz Goerke):

“目标”字段由Spring Data添加,因为它是一个惰性集合。因此就像Hibernate for JPA中的datahandler等。

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

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

选项2:使集合不懒惰

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

相当于@Json的spring-data-mongodb在Jackson中

使用QueryDSL使用Spring Data MongoDB查询DBRef

不使用DBRef映射集合(Spring Data MongoDB)

使用Spring Hateoas的jackson和Jackson2HalModule反序列化json时的null id属性

“找不到类型的属性” ...将QueryDslPredicateExecutor与MongoDB和Spring-Data一起使用时

使用Spring Data Rest和MongoDB更新特定字段

使用Spring Data JPA的Mongodb文档中的PrePersist和PreUpdate

Spring Data MongoDB使用MongoTemplate从文档中删除属性

使用Jackson将针对JAVA类的JSON序列化和反序列化

如何使用Jackson将Java Enums序列化和反序列化为JSON对象

如何使用Spring Data Java在MongoDB中更新嵌套文档

一起使用spring-data-mongodb和spring-data-neo4j

Spring RestTemplate使用Jackson作为HttpMessageConverter和joda DateTime属性进行反序列化

如何使用Spring Data MongoDB查询MongoDB文档中的JSON数组

在Java(手动参考)和spring-data mongodb中使用ObjectId作为字符串

使用Spring Data MongoDB指定分片集合

使用spring-data-mongodb进行审计

使用Spring Data在$ project MongoDB中的$ filter

使用Jackson将MongoDB日期字段反序列化为Java POJO

如何一起使用Spring Data MongoDB和Spring Cloud

如何使用Jackson ObjectMapper反序列化Spring的ResponseEntity(可能使用@JsonCreator和Jackson mixins)

使用 Spring boot WebFlux、Spring Data MongoDB Reactive 和 ReactiveMongoRepository 更新 1 個或多個特定字段 MongoDB

尝试在Spring-boot中使用Jackson将JSON数组反序列化为Java String

将Spring MVC投影与JSON和Jackson结合使用

如何使用Java和Jackson库对Json String进行多态反序列化?

Spring Data 中的 MongoDB $addField 和 $indexOfArray

将mongoDB查询转换为Spring Data MongoDB Java代码

使用Jackson JSON是否可以进行非对称序列化和反序列化?

MongoDB 项目和组操作与 Spring Data MongoDB