当前位置: 首页 > 面试题库 >

使用杰克逊将双向JPA实体序列化为JSON

杜嘉木
2023-03-14
问题内容

我正在使用Jackson将JPA模型序列化为JSON。

我有以下课程:

import com.fasterxml.jackson.annotation.*;
import javax.persistence.*;
import java.util.Set;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class)
@Entity
public class Parent {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
  private String name;

  @JsonManagedReference
  @OneToMany(html" target="_blank">mappedBy = "parent", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
  private Set<Child> children;

  //Getters and setters
}

import com.fasterxml.jackson.annotation.*;
import javax.persistence.*;
import java.util.HashSet;
import java.util.Set;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class)
@Entity
public class Child {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;
  private String name;

  @JsonBackReference
  @ManyToOne
  @JoinColumn(name = "parentId")
  private Parent parent;

  //Getters and setters
}

我正在使用POJO映射从模型序列化为JSON。当我序列化Parent对象时,我得到以下JSON:

{
  "id": 1,
  "name": "John Doe",
  "children": [
    {
      "id": 1,
      "name": "child1"
    },{
      "id": 2,
      "name": "child2"
    }
  ]
}

但是当我序列化一个Child时,我得到以下JSON:

{
  "id": 1,
  "name": "child1"
}

缺少对父级的引用。有办法解决吗?


问题答案:

我认为您必须在@JsonIdentityInfo和@ JsonBackReference / @ JsonManagedReference之间进行选择。

我会在您的实体上使用@JsonIdentityInfo(generator =
ObjectIdGenerators.PropertyGenerator.class,property =“ id”),删除@
JsonBackReference / @ JsonManagedReference对。

并在要排除的字段上添加@JsonIgnore。



 类似资料:
  • 问题内容: 我有一个Java类,我对从JSON反序列化感兴趣。我已经配置了一个特殊的MixIn类,以帮助我进行反序列化。只有和实例变量与适当的getter和setter方法相结合。看起来像这样: 在我的测试客户端中,我执行以下操作,但是在编译时它当然不起作用,因为与类型不匹配有关。 我知道我可以通过创建一个仅包含一个“响应”对象的方法来缓解此问题,但是随后我将不得不为我想返回的每种类型创建这些有点

  • 问题内容: 我正在使用Jackson将JPA模型序列化为JSON。 我有以下课程: 和 我正在使用POJO映射从模型序列化为JSON。当我序列化Parent对象时,我得到以下JSON: 但是当我序列化一个Child时,我得到以下JSON: 缺少对父级的引用。有办法解决吗? 问题答案: 我认为您必须在@JsonIdentityInfo和@ JsonBackReference / @ JsonMana

  • 我正在使用Jackson将我的JPA模型序列化到JSON中。 我有以下课程: 和 我正在使用POJO映射从模型序列化到JSON。当我序列化父对象时,我得到以下JSON: 但当我序列化一个子对象时,会得到以下JSON: 缺少对父级的引用。有没有办法解决这个问题?

  • 我正在调用一个返回JSON的endpoint,它看起来像这样(在Postman中): 此请求返回的Content-Type头是(与通常的 类来自外部库(编写这个endpoint的人)。无论如何,当我试图通过< code > rest template . exchange()调用这个endpoint时,Jackson都无法将这个JSON反序列化为一个有效的< code>Result类。我正在这样做

  • 有没有办法让Jackson序列化某个流对象(并在之后关闭)?这样地: 使现代化 澄清:我想流式传输内容,而不仅仅是将其序列化到单个String对象。

  • 问题内容: 我有一个JSON字符串,将标记为而不是。因此,例如,如果我有一个没有子对象的对象,我将收到类似以下的字符串: 我想将其反序列化为Parent类,并将子级正确设置为一个空的子级列表。 对于上述JSON字符串,我想要一个对象,其设置为,而设置为。 我会知道如何在整个课堂上使用注释 然后 但是,我想解决一个从字符串正确实例化List的一般问题: 我能得到类似的东西吗? 问题答案: 几个选择;