Spring webFlux无限递归

时间:2018-04-05 23:04:48

标签: spring spring-data-jpa

所以我尝试使用Spring webFlux并拥有以下代码:

   @Override
public Flux<? extends AnimalDatabaseEntity> queryAnimals() {
    return async(animalsRepository.findAll().stream());
}

private <T> Flux<T> async(Stream<T> stream) {
    return Flux.fromStream(stream).publishOn(scheduler);
}

我得到无限递归的问题,因为“ AnimalDatabaseEntity ”具有字段 animalFeatures

@Entity(name = "animals")
public class AnimalDatabaseEntity {

  @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;

@Column(name = "name")
private String name;

@Enumerated(EnumType.STRING)
@Column(name = "animal_type")
private AnimalType animalType;

@Column(name = "number_of_legs")
private Integer numberOfLegs;

@Column(name = "is_pet")
private boolean isPet;

@OneToMany(mappedBy = "animalDatabaseEntity", fetch = FetchType.EAGER)
private List<AnimalFeatureEntity> animalFeatures;
}

我真的不知道为什么这不起作用???

1 个答案:

答案 0 :(得分:0)

我的最佳猜测是AnimalFeatureEntity包含类型为AnimalDatabaseEntity的变量,该变量在序列化时引用回List<AnimalFeatureEntity>,从而导致无限递归。

如果适合您的用例,可以通过向@JsonIgnore添加AnimalDatabaseEntity来防止它。
但是,如果您想保留双向关系,则可以使用@JsonManagedReference/@JsonBackReference@JsonIdentityInfo。 有关用法示例,请参见this article