首页 > 解决方案 > 在没有 @JsonIgnore 的情况下使用休息服务后出错

问题描述

我有这个映射用户 *------------1 Sexe

用户类

public class User {
    @ManyToOne
    @JoinColumn(name="sexe_id")
    private Sexe sexe;

   // Rest of the Attributes
}

性别类

public class Sexe {    
    @OneToMany(mappedBy="sexe", fetch = FetchType.LAZY)
    private List<User> users;

   // Rest of the Attributes

}

和休息呼叫的控制器

@GetMapping("/users")
public List<User> getAllUsers()
{
     System.out.println("Get all Users...");
     List<User> users = new ArrayList<>();
     userRepository.findAll().forEach(users::add);
     return users;
}

使用邮递员后,我得到了这个异常:

 at
 com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:719)
 ~[jackson-databind-2.9.6.jar:2.9.6]    at
 com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155)
 ~[jackson-databind-2.9.6.jar:2.9.6]    at
 com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:727)
 ~[jackson-databind-2.9.6.jar:2.9.6]    at
 com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:719)
 ~[jackson-databind-2.9.6.jar:2.9.6]    at
 com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155)
 ~[jackson-databind-2.9.6.jar:2.9.6]    at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:145)
 ~[jackson-databind-2.9.6.jar:2.9.6]    at
 com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:107)
 ~[jackson-databind-2.9.6.jar:2.9.6]    at
 com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25)
 ~[jackson-databind-2.9.6.jar:2.9.6]    at
 com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:727)
 ~[jackson-databind-2.9.6.jar:2.9.6]    at
 com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:719)
 ~[jackson-databind-2.9.6.jar:2.9.6]    at
 com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155)
 ~[jackson-databind-2.9.6.jar:2.9.6]    at

谷歌搜索后,我发现解决方案是使用@JsonIgnore. 这个注释解决了我的问题。但是使用这个注解会导致 Angular 出现问题。

你有没有其他建议来避免这个例外?非常感谢你的帮助。

标签: restspring-bootangular6

解决方案


JsonIgnore不是唯一的解决方案。您还可以使用@JsonManagedReference@JsonBackReference

@ManyToOne
@JsonBackReference
@JoinColumn(name="sexe_id")
private Sexe sexe;

@JsonManagedReference
@OneToMany(mappedBy="sexe", fetch = FetchType.LAZY)
private List<User> users;

请参阅无法编写 JSON:无限递归 (StackOverflowError);嵌套异常弹簧靴


推荐阅读