У меня есть класс с именем "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: Ошибка определения типа: [простой тип, класс abcddomain.User];Вложенное исключение - com.fasterxml.jackson.databind.exc.InvalidDefinitionException: прямая самостоятельная ссылка, ведущая к циклу (через цепочку ссылок: java.util.Collections $ UnmodifiableRandomAccessList [0] -> abcddomain.User ["madeBy"])
если я изменяю только созданныеBy и lastModifiedBy, это работает. Менеджер пользователя не вызывает ошибку
@ManyToOne
@JsonIgnore
private User createdBy;
Но на этот раз json не содержит никакой информации createBy или lastModifiedBy.
{
"id": 2,
"userName": "admin",
"manager": {
"id": 1,
"username": "system"
}
}
Просто я хочу увидеть этот json. Первый шаг должен содержать созданныеBy и lastModifiedBy.
{
"id": 2,
"userName": "admin",
"manager": {
"id": 1,
"username": "system"
},
"createdBy": {
"id": 1,
"username": "system"
},
"lastModifiedBy": {
"id": 2,
"username": "admin"
}
}