首页 > 解决方案 > 如何在不使用 @JsonIgnore 的情况下解决 (com.fasterxml.jackson.databind) 异常

问题描述

如果我不在@JsonIgnore映射方法上使用注释,我在获取数据时会收到此异常

at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:678)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:157)
    at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:149)
    at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:112)
    at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:672)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:678)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:157)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:672)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:678)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:157)
    at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:149)
    at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:112)
    at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25)
    at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:672)
    at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:678)
    at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:157)

请看一下实体类

package com.rasvek.cg.entity;
// Generated May 14, 2018 11:39:07 PM by Hibernate Tools 5.1.7.Final

import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import static javax.persistence.GenerationType.IDENTITY;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import com.fasterxml.jackson.annotation.JsonIgnore;

/**
 * MasterCampusClass generated by hbm2java
 */
@Entity
@Table(name = "master_campus_class", catalog = "campus_guru_01")
public class MasterCampusClass implements java.io.Serializable {

    private Integer classId;
    private String className;
    private String classShortName;
@Id
    @GeneratedValue(strategy = IDENTITY)

    @Column(name = "class_id", unique = true, nullable = false)
    public Integer getClassId() {
        return this.classId;
    }

    public void setClassId(Integer classId) {
        this.classId = classId;
    }

    @Column(name = "class_name")
    public String getClassName() {
        return this.className;
    }

    public void setClassName(String className) {
        this.className = className;
    }

    @Column(name = "class_short_name")  
    public String getClassShortName() {
        return this.classShortName;
    }


//@JsonIgnore  
@OneToMany(fetch = FetchType.EAGER, mappedBy = "masterCampusClass")
    public Set<MasterCampusSection> getMasterCampusSections() {
        return this.masterCampusSections;
    }

    public void setMasterCampusSections(Set<MasterCampusSection> masterCampusSections) {
        this.masterCampusSections = masterCampusSections;
    }
}

如果我使用 @JsonIgnore ,当我保存时MasterCampusSections 不接受 json ,由于 @jsonIgnore 注释,它不会作为 json 接收

不使用@JsonIgnore注解就不能解决上面的异常吗?

如果可能,请告诉我!谢谢你。

标签: javahibernatehibernate-mapping

解决方案


您似乎正在尝试做的是维护父子实体引用。尝试@JsonManagedReference在. MasterCampusClass_ @JsonBackReference_MasterCampusSection

If, however, you need an explicit value referencing the parent class inside the JSON (like an id), you have to use custom serializers at both ends. Both the @JsonBackReference and @JsonIgnore annotations will make it ignore custom serializers.


推荐阅读