Json (fasterxml) stackoverflow exception
Sure thing, @JsonIgnore
does the job. But what if we need ignored field in our JSON output?
The solution is very simple.
We annotate our 'guilty' field by @JsonManagedReference
annotation on the one side of our relation (which means our @ManyToMany
annotation).
And @JsonBackReference
on the other side of relation (where @OneToMany
has been placed).
And that's it. No more recursive loops.
Probably if you comment private Category parent;
you will not have the StackOverflow. I've got the same problem in a project with circular dependencies.
The best way to solve this problem is to use the id of the parent instead of the Class like:
private Long parentId;
Edit:
The problem is with getParentChain()
that is trying to be serialized. By adding @JsonIgnore before the method the problem was resolved.
One annotation solves your problem.
Add following annotation on class.
@JsonIdentityInfo( generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
Other way is to annotate on Collections @JsonManagedReference for forward direction and @JsonBackReference. for backward direction in mapping.
example:
public class User{ @JsonManagedReference @OneToMany(mappedBy = "user") Set<Address> s = new Hashset<>();}public class Address{ @JsonBackReference @ManyToOne @JoinColumn User user;}