简体   繁体   English

com.fasterxml.jackson.databind.ser.BeanSerializer.serialize Spring JPA

[英]com.fasterxml.jackson.databind.ser.BeanSerializer.serialize Spring JPA

I have a couple one to many relationships in spring between my classes. 春季我的课之间有一对多的关系。 And when i try to login I get the error, it is like infinite recursion, here is the whole error message. 当我尝试登录时出现错误,就像无限递归一样,这是整个错误消息。

at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.8.10.jar:2.8.10]
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:704) ~[jackson-databind-2.8.10.jar:2.8.10]
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:689) ~[jackson-databind-2.8.10.jar:2.8.10]
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.8.10.jar:2.8.10]
    at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:149) ~[jackson-databind-2.8.10.jar:2.8.10]
    at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:112) ~[jackson-databind-2.8.10.jar:2.8.10]
    at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25) ~[jackson-databind-2.8.10.jar:2.8.10]
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:704) ~[jackson-databind-2.8.10.jar:2.8.10]
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:689) ~[jackson-databind-2.8.10.jar:2.8.10]

I have 5 classes that are connected with each other. 我有5个相互关联的类。 Here they are: 他们来了:

@Entity
public class AppUser implements UserDetails {

    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;

    @Column(unique = true)
    private String username;

    private String password;

    @ElementCollection(fetch = FetchType.EAGER)
    private List<String> roles = new ArrayList<>();

    @ManyToOne
    @JoinColumn(name = "apartmen_id")
    @JsonIgnoreProperties(value = {"apartmen_tenats"}, allowSetters=true)
    private Apartmen apartmen; // apartmen in which he lives

    @ManyToOne
    @JoinColumn(name = "institution_id")
    @JsonIgnoreProperties(value = {"workers"}, allowSetters=true)
    private Institution institution; // institution in which he works

    @OneToMany(mappedBy = "worker")
    @JsonIgnoreProperties(value = {"worker"}, allowSetters = true)
    private Set<Failure> failures; // Kvarovi na kojima je radio
}

The second class: 第二类:

@Entity
public class Failure implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String name;
    private String description; // Opis kvara

    @Temporal(TemporalType.TIMESTAMP)
    private Date dateCreated; // Datum i vreme kada je kvar kreiran

    @Temporal(TemporalType.TIMESTAMP)
    private Date dateSolved; // Datum i vreme kada je kvar popravljen

    private boolean solved; // Da li je kvar popravljen

    @ManyToOne
    @JoinColumn(name = "app_user_id")
    @JsonIgnoreProperties(value = {"failures"}, allowSetters=true)
    private AppUser worker; // Radnik koji je zaduzen za kvar

    @ManyToOne
    @JoinColumn(name = "institution_id")
    @JsonIgnoreProperties(value = {"failures"}, allowSetters=true)
    private Institution institution; // Institucija kojoj je kvar prijavljen

    @ManyToOne
    @JoinColumn(name = "building_id")
    @JsonIgnoreProperties(value = {"failures"}, allowSetters=true)
    private Building building; // Zgrada u kojoj je kvar nastao
}

The third class: 第三类:

@Entity
public class Building implements Serializable{

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String name;
    private String location;
    private String owner; // Vlasnik zgrade
    private int numberOfApartments;
    private int numberOfAparartmentsWithTenats; // Broj stanova koji su naseljeni
    private boolean hasPresident; // Oznacava da li zgrada ima predsednika skupstine stanara

    @OneToMany(mappedBy = "apartmenBuilding")
    @JsonIgnoreProperties(value = {"apartmenBuilding"}, allowSetters = true)
    private Set<Apartmen> apartments; // stanovi u zgradi

    @ManyToMany(mappedBy = "buildings")
    @JsonIgnoreProperties(value = {"buildings"}, allowSetters = true)
    private Set<Institution> institutions;

    @OneToMany(mappedBy = "building", fetch = FetchType.EAGER)
    @JsonIgnoreProperties(value = {"building"}, allowSetters = true)
    private List<Failure> failures; // Kvarovi koji su nastali u zgradi
}

The fourth class: 第四类:

@Entity
public class Institution {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String name;
    private String location;
    private String director;
    private String email;
    private String contactPhone;
    private String webSiteUrl;

    @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
    @JoinTable(name = "institution_building",
        joinColumns = @JoinColumn(name = "institution_id", referencedColumnName = "id"),
        inverseJoinColumns = @JoinColumn(name = "building_id", referencedColumnName = "id"))
    @JsonIgnoreProperties(value = {"institutions"}, allowSetters=true)
    private Set<Building> buildings; // Buildings which this institution is maintaining

    @OneToMany(mappedBy = "institution")
    @JsonIgnoreProperties(value = {"institution"}, allowSetters = true)
    private Set<AppUser> workers;

    @OneToMany(mappedBy = "institution", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    @JsonIgnoreProperties(value = {"institution"}, allowSetters = true)
    private Set<Failure> failures; // Kvarovi na kojima je radila institucija
}

And the last class is: 最后一类是:

@Entity
public class Apartmen implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String name;
    private String location;
    private String owner;
    private int numberOfTenats;
    private boolean hasApartmentBuilding;
    private boolean hasOwner;

    @ManyToOne
    @JoinColumn(name = "building_id")
    @JsonIgnoreProperties(value = {"apartments"}, allowSetters=true)
    private Building apartmenBuilding;

    @OneToMany(mappedBy = "apartmen")
    @JsonIgnoreProperties(value = {"apartmen"}, allowSetters = true)
    private Set<AppUser> apartmen_tenats;
}

I don't know why it happens, but maybe it is because of the relationship with the class Failure. 我不知道为什么会这样,但是也许是由于与失败类的关系。 I think that may be the case because that class has a relationship with every other class in my code. 我认为可能是这种情况,因为该类与我的代码中的所有其他类都有关系。 If that is the case, than can you please show me why is it happening and how to do it properly. 如果真是这样,那么您能不能告诉我为什么会这样以及如何正确进行。

Thank you in advance. 先感谢您。

@JsonIgnoreProperties is a class level annotation and it expects the exact field names in the class to ignore. @JsonIgnoreProperties是一个类级别的注释,它希望忽略类中的确切字段名称。

The best way is to replace all your @JsonIgnoreProperties with simply 最好的方法是简单地替换所有@JsonIgnoreProperties

@JsonIgnore.

ie

@ManyToOne
@JoinColumn(name = "apartmen_id")
@JsonIgnoreProperties(value = {"apartmen_tenats"}, allowSetters=true)
private Apartmen apartmen;

Change this to 更改为

@ManyToOne
@JoinColumn(name = "apartmen_id")
@JsonIgnore
private Apartmen apartmen;

Make similar changes for all such occurrences of @JsonIgnoreProperties . 对所有此类@JsonIgnoreProperties进行类似的更改。 This should work. 这应该工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.Z93F725A07423FE1C889F448B33BootD21F:248B33BootD21F - com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25 SpringBoot java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ser/FilterProvider - java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ser/FilterProvider 杰克逊错误 com.fasterxml.jackson.databind.ser.ContainerSerializer: 方法<init> (Lcom/fasterxml/jackson/databind/JavaType;)V 未找到 - Jackson error com.fasterxml.jackson.databind.ser.ContainerSerializer: method <init>(Lcom/fasterxml/jackson/databind/JavaType;)V not found 使用com.fasterxml.jackson.databind.ObjectMapper序列化接口字段 - serialize interface fields using com.fasterxml.jackson.databind.ObjectMapper 服务器崩溃并出现错误:com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields - Server crashes with the error: com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields Flink启动时java.lang.ClassNotFoundException:com.fasterxml.jackson.databind.ser.FilterProvider - java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.ser.FilterProvider when flink boot up java.lang.StackOverflowError: null at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields - java.lang.StackOverflowError: null at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields 无法解析类型[org.glassfish.jersey.message.filtering.spi.ObjectProvider的所有bean。 <com.fasterxml.jackson.databind.ser.FilterProvider> ] - Unable to resolve any beans for Types [org.glassfish.jersey.message.filtering.spi.ObjectProvider<com.fasterxml.jackson.databind.ser.FilterProvider>] com.fasterxml.jackson.databind.exc.InvalidDefinitionException - com.fasterxml.jackson.databind.exc.InvalidDefinitionException com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException - com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM