【发布时间】:2019-10-18 06:42:15
【问题描述】:
我有一个名为“BaseEntity”的类。从基本实体扩展的其他实体。
基础实体
@MappedSuperclass
public abstract class BaseEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "sequenceGenerator")
@SequenceGenerator(name = "sequenceGenerator")
private Long id;
@ManyToOne
@JsonIgnoreProperties({"createdBy", "lastModifiedBy", "manager"})
private User createdBy;
private Instant createdDate = Instant.now();
@ManyToOne
@JsonIgnoreProperties({"createdBy", "lastModifiedBy", "manager"})
private User lastModifiedBy;
private Instant lastModifiedDate = Instant.now();
// getters & setters
}
从基本实体扩展的用户实体。
@Entity
public class User2 extends BaseEntity {
private String userName;
@ManyToOne
@JsonIgnoreProperties({"createdBy", "lastModifiedBy", "manager"})
private User manager;
// getters & setters
}
错误 当我尝试序列化用户时出现此错误。
org.springframework.http.converter.HttpMessageConversionException:类型定义错误:[简单类型,类a.b.c.d.domain.User];嵌套异常是 com.fasterxml.jackson.databind.exc.InvalidDefinitionException: 直接自引用导致循环(通过引用链:java.util.Collections$UnmodifiableRandomAccessList[0]->a.b.c.d.domain.User["createdBy"])
如果我像这样只更改 createdBy 和 lastModifiedBy 就可以了。管理员用户不会导致错误
@ManyToOne
@JsonIgnore
private User createdBy;
但这次 json 不包含任何 createdBy 或 lastModifiedBy 信息。
{
"id": 2,
"userName": "admin",
"manager": {
"id": 1,
"username": "system"
}
}
我只是想看看这个 json。第一步必须包含 createdBy 和 lastModifiedBy。
{
"id": 2,
"userName": "admin",
"manager": {
"id": 1,
"username": "system"
},
"createdBy": {
"id": 1,
"username": "system"
},
"lastModifiedBy": {
"id": 2,
"username": "admin"
}
}
【问题讨论】:
标签: java json spring-boot jackson