【发布时间】:2020-10-05 15:42:23
【问题描述】:
我需要将具有 JsonManagedReference 和 JsonBackReference 实现的实体转换为 json:
@Entity
@Table(name = "myparenttable", schema = "myschema", catalog = "mydb")
@JsonIgnoreProperties(ignoreUnknown = true)
public class Parent implements Serializable {
private Integer id_parent;
private String name;
@JsonManagedReference
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
private List<Child> children;
//getters and setters
}
@Entity
@Table(name = "mychildtable", schema = "myschema", catalog = "mydb")
public class Child implements Serializable {
private Integer id_child;
private String description;
@JsonBackReference
private Parent parent;
//getters and setters
}
有了这个设置,persist 函数就很简单了,我只是执行一个
em.persist(父);
两个实体都被插入到数据库中;但我还需要将这些实体转换为 json 用于审计目的。执行此操作时出现无限递归错误:
ObjectMapper mapper = new ObjectMapper();
String jsonString = mapper
.writerWithDefaultPrettyPrinter()
.writeValueAsString(parent);
有没有办法做到这两点?
【问题讨论】:
-
最好使用 DTO(数据传输对象)而不是实体,以避免泄露实体实现细节和使用 Json 注释使实体混乱,并提供更简单的视图。
-
RestRepositories 可能是您下一次技术审查的候选对象。
-
这很奇怪。您不应该收到错误,
@JsonBackReferences 不应该被序列化。children是Parent中的唯一关联吗?