bharath
bharath

Reputation: 395

How to solve (com.fasterxml.jackson.databind) Exception with out using @JsonIgnore

I have been getting this Exception when getting data if I don't use @JsonIgnore annotation on mapped method

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)

please have a look at entity class

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;
    }
}

If I use @JsonIgnore , when i am saving MasterCampusSections is not accepting json , it's not receiving as json because of @jsonIgnore annotation

Can't we solve the above exception without using @JsonIgnore annotation?

If possible please let me know! Thank you.

Upvotes: 2

Views: 7270

Answers (1)

coladict
coladict

Reputation: 5095

What it seems you're trying to do is maintain a parent-child entity reference. Try using the @JsonManagedReference annotation in MasterCampusClass and @JsonBackReference on the matching field in 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.

Upvotes: 4

Related Questions