Резюме: Можно ли использовать Джексон для двунаправленных ссылок с полиморфными типами, где @JsonTypeInfo
также используется?Как обрабатывать двунаправленные ссылки с полиморфными типами и JSON?
примечание в нижней части this page состояний нет, но она была написана в 2010 году и применяется Джексон v1.6.0, так что я надеюсь, может быть, что-то изменилось или кто-то может предложить альтернативный подход .
фона: Я получаю ошибку JsonMappingException: Infinite recursion
с помощью библиотеки Джексона и JPA. Я знаю, что могу добавить @JsonIgnore
как suggested here, но недостатком является то, что я теряю двунаправленную связь, когда объекты JPA сериализуются/десериализуются.
Jackson v1.6.0 представил @JsonManagedReference
и @JsonBackReference
аннотации. Это выглядит великолепно, но documentation с 2010 года конкретно указывает, что эти аннотации не работают с полиморфной обработкой, используя @JsonTypeInfo
, что, конечно же, является тем, что у меня есть.
Ниже надуманный пример моих классов сущностей:
@Entity
public class Owner implements Serializable {
@Id
@GeneratedValue
@Column(name="owner_id")
private Long id;
@OneToMany(mappedBy="pet", orphanRemoval=true, cascade=CascadeType.ALL)
private List<Pet> pets;
public List<Pet> getPets() {return pets;}
public void setPets(List<Pet> pets) {this.pets = pets;}
}
@Entity
@DiscriminatorColumn(name="pet_type")
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
@Type(value = Dog.class, name = "dog"),
@Type(value = Cat.class, name = "cat"),
@Type(value = Bird.class, name = "bird") })
public class Pet implements Serializable {
@Id
@GeneratedValue
@Column(name="pet_id")
private Long id;
@ManyToOne
@JoinColumn(name="owner_id")
private Owner owner;
//@JsonIgnore
public Owner getOwner() {return owner;}
public void setOwner(Owner owner) {this.owner = owner;}
}
спасибо за предложение. Я проверю это – Justin