Json Infinite Recursion is one of the most common problems when we serialize Java objects which having Bidirectional-Relationships. So in the tutorial JavaSampleApproach will show you how to smoothly handle the problems with Jackson annotations: @JsonIgnore
, @JsonView
, {@JsonManagedReference
, @JsonBackReference
} and @JsonIdentityInfo
.
Related articles:
– Jackson to convert Java Object to/from Json String
– Integrate Spring RestAPIs with @JsonView
– How to use @JsonView to serialize/de-serialize and customize JSON format from Java Object
I. Infinite Recursion problem
We create 2 model classes: Company & Product have one-to-many relationship:
– Company:
public class Company {
private int id;
private String name;
private List products;
public Company(){
}
...
– Product
public class Product {
private int id;
private String name;
private Company company;
public Product(){
}
Serialize Java Objects with segment code:
(new ObjectMapper()).writeValueAsString(apple);
-> Infinite recursion (StackOverflowError) thrown:
Caused by: com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError) (through reference chain: com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"]->java.util.ArrayList[0]->com.javasampleapproach.jackson.model.Product["company"]->com.javasampleapproach.jackson.model.Company["products"])
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:706)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:704)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:690)
Why? -> Beacause of the Bidirectional-Relationships between Company objects and Product objects.
II. Solution
Initial an apple Company & 2 Product {iphone7, iPadPro} with segment code:
Product iphone7 = new Product(1, "Iphone 7");
Product iPadPro = new Product(2, "IPadPro");
List appleProducts = new ArrayList(Arrays.asList(iphone7, iPadPro));
Company apple = new Company(1, "Apple", appleProducts);
iphone7.setCompany(apple);
iPadPro.setCompany(apple);
1. Solution 1 – Exclude one side of the relationship by @JsonIgnore or @JsonView
1.1 Use @JsonIgnore
Modify Product with @JsonIgnore
public class Product {
private int id;
private String name;
@JsonIgnore
private Company company;
– Serialize with segment code:
ObjectMapper mapper = new ObjectMapper();
String result = mapper.writeValueAsString(company);
-> Result:
{
"id":1,
"name":"Apple",
"products":[
{
"id":1,
"name":"Iphone 7"
},
{
"id":2,
"name":"IPadPro"
}
]
}
– Deserialize with segment code:
ObjectMapper mapper = new ObjectMapper();
Object object = mapper.readValue(jsonString, valueType);
-> Can not preserve the Bidirectional-Relationships
1.2 Use @JsonView
See How to use @JsonView to serialize/de-serialize and customize JSON format from Java Object.
Modify 2 models Product with @JsonView
:
– Company:
public class Company {
@JsonView(View.DetailView.class)
private int id;
@JsonView(View.DetailView.class)
private String name;
@JsonView(View.DetailView.class)
private List products;
public Company(){
}
...
– Product:
public class Product {
@JsonView(View.DetailView.class)
private int id;
@JsonView(View.DetailView.class)
private String name;
private Company company;
public Product(){
}
...
– Serialize with segment code:
ObjectMapper mapper = new ObjectMapper();
mapper.disable(MapperFeature.DEFAULT_VIEW_INCLUSION);
String result = mapper.writerWithView(serializationView).writeValueAsString(object);
-> Result:
{
"id":1,
"name":"Apple",
"products":[
{
"id":1,
"name":"Iphone 7"
},
{
"id":2,
"name":"IPadPro"
}
]
}
– Deserialize with segment code:
ObjectMapper mapper = new ObjectMapper();
Object object = mapper.readerWithView(view).forType(valueType).readValue(jsonString);
-> Can not preserve the Bidirectional-Relationships after deserialization.
2. Solution 2 – Use {@JsonManagedReference, @JsonBackReference} and @JsonIdentityInfo
With the solution we can preserve Bidirectional-Relationships when deserialize Json strings to Java objects
2.1 Use @JsonManagedReference, @JsonBackReference
@JsonManagedReference
: a part with the annotation will be serialized normally.
@JsonBackReference
: a part with the annotation will be omitted from serialization.
Modify 2 models Product with {@JsonManagedReference, @JsonBackReference}
:
– Company:
public class Company {
private int id;
private String name;
@JsonManagedReference
private List products;
public Company(){
}
...
– Product:
public class Product {
private int id;
private String name;
@JsonBackReference
private Company company;
public Product(){
}
...
– Serialize with segment code:
ObjectMapper mapper = new ObjectMapper();
String result = mapper.writeValueAsString(company);
-> Result:
{
"id":1,
"name":"Apple",
"products":[
{
"id":1,
"name":"Iphone 7"
},
{
"id":2,
"name":"IPadPro"
}
]
}
– Deserialize with segment code:
ObjectMapper mapper = new ObjectMapper();
Object object = mapper.readValue(jsonString, valueType);
-> Can preserve the Bidirectional-Relationships after deserialization.
2.2 Use @JsonIdentityInfo
Modify 2 models Product with @JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class,property="@id", scope = Product.class)
– Company:
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class,property="@id", scope = Product.class)
public class Company {
private int id;
private String name;
private List products;
public Company(){
}
...
– Product:
@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class,property="@id", scope = Product.class)
public class Product {
private int id;
private String name;
private Company company;
public Product(){
}
...
– Serialize with segment code:
ObjectMapper mapper = new ObjectMapper();
String result = mapper.writeValueAsString(company);
-> Result:
Serialize Process - JsonString:{
"@id":1,
"id":1,
"name":"Apple",
"products":[
{
"@id":1,
"id":1,
"name":"Iphone 7",
"company":1
},
{
"@id":2,
"id":2,
"name":"IPadPro",
"company":1
}
]
}
– Deserialize with segment code:
ObjectMapper mapper = new ObjectMapper();
Object object = mapper.readValue(jsonString, valueType);
-> Can preserve the Bidirectional-Relationships!
2. {@JsonManagedReference, @JsonBackReference} and @JsonIdentityInfo: can preserve the Bidirectional-Relationships!
III. Sourcecode
Technologies
– Java: 1.8
– Maven: 3.3.9
– Spring Tool Suite: Version 3.8.4.RELEASE
– Spring Boot: 1.5.4.RELEASE
– Jackson library
Use below dependency for Jackson library:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
SourceCodes:
– JacksonJsonIgnore
– JacksonJsonView
– JacksonJsonManagedBackReference
– JacksonJsonJsonIdentityInfo
Good post. I have a question for
@JsonIdentityInfo
.I have tried to serialize Product object. its giving like below:
But I should get like:
How to achieve that ?
Hello Thrinath,
serialize Object To String with the info:
That’s enough info and not redundancy for deserialize String To Object.
So Why you want to work-arround with your expected which makes lots of redundancy data and inconsitency?
Regards,
JSA
Wonderful solution. @JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class,property=”@id”, scope = Product.class)
Gracias!
Thank you very much man !
Great post !
I have a doubt:
Why when I search Product by ID, the field of Company comes Null??
Hi Author,
Thanks for the nice tutorials and great posts. However I found that @JsonManagedReference, @JsonBackReference does not gives you the data associated with @OneToMany and @ManyToOne scenario, also when using @JsonIgnoreProperties does skip associated entity data. How to solve this?
I see this solution (@JsonIgnore, @JsonView, etc) provided everywhere.
It seems to be an unsatisfactory solution if you actually need the values associated
with the entity. Perhaps I’m not creative enough but in a RESTful (or otherwise)
service I don’t see a way to send everything needed except by making two DB calls.
Can you clarify a way out of doing that?
Thanks.
Muchas gracias. ?Como puedo iniciar sesion?
I am sure this piece of writing has touched all the internet viewers, its really really nice
post on building up new website.
I am regular reader, how are you everybody? This article posted at this website is really
pleasant.
Hi, after reading this amazing article i am also happy to share my experience
here with colleagues.
If you wish for to take a great deal from this paragraph
then you have to apply these strategies to your won webpage.
I enjoy what you guys are up too. This kind of clever work and coverage!
Keep up the very good works guys I’ve included you guys to blogroll.
Does your blog have a contact page? I’m having trouble locating it but, I’d like to send you an e-mail.
I’ve got some ideas for your blog you might be interested in hearing.
Either way, great website and I look forward to seeing it
grow over time.
If some one desires to be updated with hottest technologies afterward he must be
pay a visit this web site and be up to date daily.
This design is spectacular! You definitely know how
to keep a reader entertained. Between your wit
and your videos, I was almost moved to start my own blog (well, almost…HaHa!) Excellent job.
I really loved what you had to say, and more than that,
how you presented it. Too cool!
I’ve read some good stuff here. Certainly worth bookmarking for revisiting.
I wonder how much effort you place to make this sort of wonderful informative web site.
Heya are using WordPress for your site platform? I’m new to
the blog world but I’m trying to get started and create my own. Do you require any html coding expertise to make your own blog?
Any help would be greatly appreciated!
I loved as much as you will receive carried out right here.
The sketch is tasteful, your authored material stylish.
nonetheless, you command get got an shakiness over that you wish be delivering the following.
unwell unquestionably come more formerly again since exactly
the same nearly very often inside case you shield this increase.
I was suggested this web site through my cousin. I am not positive whether or not
this put up is written through him as no one else
recognize such certain approximately my difficulty.
You’re amazing! Thanks!
WOW just what I was searching for. Came here by
searching for java tutorials
Hi there, yeah this article is truly fastidious and I
have learned lot of things from it regarding blogging.
thanks.
Fine way of telling, and fastidious piece of writing to get data on the topic of my presentation subject matter, which
i am going to convey in university.
Wonderful blog! Do you have any tips for aspiring
writers? I’m planning to start my own site soon but I’m a little lost on everything.
Would you propose starting with a free platform
like WordPress or go for a paid option? There are so many choices out there that I’m totally confused
.. Any ideas? Kudos!
Thank you for another informative site. The place else may I get that kind of info written in such
a perfect method? I have a project that I am simply
now running on, and I have been on the glance out for such info.
After I originally left a comment I appear to
have clicked the -Notify me when new comments are added- checkbox and now every time a comment is added I recieve 4 emails with
the same comment. Is there a way you are able to remove me from that service?
Cheers!
you’re really a good webmaster. The web site loading pace is incredible.
It kind of feels that you’re doing any unique trick. Moreover, The contents
are masterwork. you’ve performed a excellent job on this
matter!
I’m not that much of a online reader to be honest but your sites really nice, keep it up!
I’ll go ahead and bookmark your website to come back in the future.
All the best
Great post. I was checking continuously this blog and I
am impressed! Very helpful information specially the last
part 🙂 I care for such information much. I was looking for this certain info for a very long time.
Thank you and best of luck.
Hi, I do think this is an excellent web site. I stumbledupon it 😉 I may come back once
again since I book-marked it. Money and freedom is the greatest
way to change, may you be rich and continue to guide other people.
This post will help the internet visitors for building up new webpage or even a blog from start to end.
Wow! After all I got a website from where I know how to
truly get valuable facts concerning my study and knowledge.
I am regular visitor, how are you everybody? This piece of writing posted at this web
site is in fact pleasant.
Thanks for sharing your thoughts. I truly appreciate your efforts and
I will be waiting for your next write ups thanks once again.
We stumbled over here different website and thought I might as well check things out.
I like what I see so now i am following you. Look forward to looking into your web page yet
again.
Howdy! I could have sworn I’ve been to this blog
before but after browsing through some of the post I realized
it’s new to me. Nonetheless, I’m definitely happy I found
it and I’ll be bookmarking and checking back often!
Marvelous, what a webpage it is! This weblog provides useful data
to us, keep it up.
My family all the time say that I am killing my time here at net, except I know I am getting knowledge everyday by reading such nice articles.
What a information of un-ambiguity and preserveness of
valuable experience on the topic of unpredicted emotions.
Hey! Would you mind if I share your blog with my myspace
group? There’s a lot of people that I think would really enjoy
your content. Please let me know. Cheers
You actually make it seem so easy with your presentation but I find this matter to
be really something which I think I would never understand.
It seems too complex and very broad for me.
I’m looking forward for your next post, I’ll try to get the hang of it!
Someone necessarily help to make significantly articles I would state.
This is the very first time I frequented your web page and thus far?
I surprised with the research you made to
make this actual post incredible. Wonderful job!
Howdy! This blog post couldn’t be written any better! Looking at this article reminds
me of my previous roommate! He continually kept talking about this.
I’ll send this information to him. Fairly certain he will have a great read.
Many thanks for sharing!
Hi mates, its impressive piece of writing about cultureand entirely defined, keep it up all the time.
Hey there would you mind letting me know which webhost you’re utilizing?
I’ve loaded your blog in 3 completely different internet browsers and I must say this blog loads
a lot faster then most. Can you recommend a good
hosting provider at a reasonable price? Kudos, I appreciate it!
Greate post. Keep writing such kind of info on your page.
Im really impressed by your site.
Hey there, You have performed an incredible job. I will definitely digg it and
in my view recommend to my friends. I am sure they’ll
be benefited from this web site.
Wow! Finally I got a webpage from where I be able to in fact obtain valuable facts concerning my study and knowledge.
Excellent goods from you, man. I have understand your stuff
previous to and you are just too fantastic.
I really like what you have acquired here,
certainly like what you’re saying and the way in which you say
it. You make it entertaining and you still take care of to
keep it smart. I can not wait to read far more from you.
This is really a terrific website.
Greetings! This is my 1st comment here so I just wanted to give a quick shout out and
say I genuinely enjoy reading your articles. Can you suggest any other blogs/websites/forums that go over the same topics?
Appreciate it!
413929 95715Magnificent beat ! I would like to apprentice whilst you amend your site, how could i subscribe for a weblog site? The account helped me a appropriate deal. I had been slightly bit acquainted of this your broadcast provided brilliant transparent concept 67087
If you want to obtain a great deal from this article then you have to apply these strategies to your won website.
I’m extremely inspired together with your writing talents as neatly as
with the format in your weblog. Is this a paid theme or did you customize it yourself?
Anyway keep up the excellent high quality writing, it is uncommon to
peer a nice blog like this one these days..
WOW just what I was looking for. Came here by searching for java
tutorials
Hi, I do believe this is a great website. I stumbledupon it 😉 I may revisit yet again since I
book-marked it. Money and freedom is the greatest way
to change, may you be rich and continue to help other people.
Hello very cool website!! Man .. Excellent ..
Wonderful .. I’ll bookmark your website and take the feeds additionally?
I’m satisfied to seek out a lot of helpful info right
here within the publish, we’d like work out extra techniques on this regard,
thank you for sharing. . . . . .
Write more, thats all I have to say. Literally, it seems as
though you relied on the video to make your point. You definitely know what youre talking
about, why waste your intelligence on just posting videos to your weblog when you could be giving us something enlightening to
read?
Howdy exceptional blog! Does running a blog like this require a large amount of
work? I have no understanding of coding but I was hoping to start my own blog soon. Anyhow,
if you have any recommendations or tips for new blog owners please share.
I understand this is off topic but I just had to
ask. Kudos!
I have read so many articles or reviews regarding the blogger
lovers except this article is truly a pleasant post, keep it up.
My brother suggested I might like this blog. He was totally right.
This post truly made my day. You can not imagine simply how much time I
had spent for this information! Thanks!
I love your blog.. very nice colors & theme.
Did you make this website yourself or did you hire someone to do it for
you? Plz answer back as I’m looking to design my own blog
and would like to find out where u got this from.
appreciate it
What i don’t realize is in fact how you are not actually a
lot more smartly-favored than you might be now. You’re so intelligent.
You realize therefore significantly in relation to this subject, made me for my part believe it from
a lot of numerous angles. Its like women and men are not interested unless it is one thing to accomplish with Woman gaga!
Your individual stuffs nice. Always take care of it up!
Hi exceptional website! Does running a blog such as
this require a large amount of work? I have absolutely no
expertise in coding but I was hoping to start my own blog in the near future.
Anyhow, should you have any suggestions or tips for new blog owners please share.
I know this is off topic however I just had to ask.
Thank you!
Hi there, just wanted to say, I loved this blog
post. It was helpful. Keep on posting!
I’d like to find out more? I’d love to find out more
details.
I’ve been browsing online more than 4 hours today, yet I never found any interesting article like yours.
It’s pretty worth enough for me. In my view, if all website owners and
bloggers made good content as you did, the web will be a lot more useful than ever before.
Fastidious response in return of this matter with real arguments and explaining
all on the topic of that.
Great post. I was checking continuously this blog and I’m
impressed! Very helpful info specifically the last
part 🙂 I care for such information much. I was seeking this particular info for a long
time. Thank you and best of luck.
Hi there would you mind letting me know which webhost you’re utilizing?
I’ve loaded your blog in 3 completely different web browsers and I must
say this blog loads a lot faster then most. Can you recommend a good hosting provider
at a reasonable price? Many thanks, I appreciate it!
Undeniably believe that which you said. Your favorite
justification seemed to be on the internet the easiest thing to be aware of.
I say to you, I definitely get irked while people think about worries that they just do not know about.
You managed to hit the nail upon the top as well as defined
out the whole thing without having side effect , people can take a signal.
Will probably be back to get more. Thanks
Just desire to say your article is as astounding.
The clearness in your post is just great and i can assume you are an expert on this subject.
Well with your permission let me to grab your RSS feed to keep up to date with forthcoming post.
Thanks a million and please carry on the enjoyable work.
Everything is very open with a very clear description of the challenges.
It was definitely informative. Your website is useful. Thank you for sharing!
Remarkable! Its genuinely awesome paragraph, I have got much clear idea about from this piece of writing.|
Nice post. I learn something new and challenging on websites I stumbleupon on a daily basis. It’s always useful to read through content from other authors and practice a little something from other websites. |
เราอยู่ในยุคที่แค่หยิบโทรศัพท์ขึ้นมาก็สามารถหาเงินได้ง่ายๆแล้ว คาสิโนออนไลน์ จะเป็นเว็บแทงบอลออนไลน์ที่จะทำให้ท่านหาเงินได้ในชั่วพริบตา เราได้รวบรวมทุกเกมทั้งเกมเก่าเกมใหม่ที่ติดกระแสอยู่ในตอนนี้ไม่ว่าจะเป็นบาคาร่า สล็อต แทงบอล ยิงปลา เรียกได้ว่าครบเลยครับ
With havin so much content and articles do you ever run into any issues of plagorism or copyright violation? My website has a lot of exclusive content I’ve either authored myself or outsourced but it appears a lot of it is popping it up all over the internet without my agreement. Do you know any techniques to help reduce content from being stolen? I’d genuinely appreciate it.|
Wow, amazing blog layout! How lengthy have you been running a blog for? you make running a blog look easy. The overall glance of your website is wonderful, as smartly as the content!
Ahaa, its good dialogue regarding this paragraph at this place at this website, I have read all that, so at this time me also commenting here.|
Everything is very open with a very clear explanation of the challenges. It was really informative. Your site is very useful. Thank you for sharing!|
I loved your blog.Much thanks again. Great.
It’s very effortless to find out any topic on web as compared to textbooks, as I found this paragraph at this web page.|
With havin so much content and articles do you ever run into any issues of plagorism or copyright infringement? My blog has a lot of unique content I’ve either written myself or outsourced but it appears a lot of it is popping it up all over the internet without my agreement. Do you know any solutions to help protect against content from being ripped off? I’d truly appreciate it.|
This is really interesting, You are a very skilled blogger. I’ve joined your rss feed and look forward to seeking more of your fantastic post. Also, I’ve shared your site in my social networks!|
Hey there would you mind stating which blog platform you’re using? I’m planning to start my own blog soon but I’m having a hard time choosing between BlogEngine/Wordpress/B2evolution and Drupal. The reason I ask is because your design seems different then most blogs and I’m looking for something unique. P.S Sorry for getting off-topic but I had to ask!|
I need to to thank you for this excellent read!! I definitely enjoyed every bit of it. I have got you saved as a favorite to check out new stuff you post…|
I used to be able to find good info from your articles.|
It’s genuinely very difficult in this active life to listen news on Television, therefore I just use the web for that purpose, and get the latest information.|
I like the helpful info you provide for your articles. I’ll bookmark your weblog and take a look at again right here frequently. I am relatively certain I’ll be informed many new stuff right right here! Best of luck for the following!|
It’s remarkable for me to have a web site, which is valuable in favor of my knowledge. thanks admin|
Hi there, I discovered your website by the use of Google whilst looking for a comparable topic, your site got here up, it appears to be like great. I’ve bookmarked it in my google bookmarks.
Why people still use to read news papers when in this technological globe all is available on net?|
Marvelous, what a blog it is! This webpage gives useful information to us, keep it up.|
I am regular reader, how are you everybody? This piece of writing posted at this web page is in fact fastidious.|
Best view i have ever seen !
Zumindest es kann monotone, aber if jemand prüfen SERP Einträge one-by-one, Sie sollten in einer Position, in entdecken vielleicht mehr Websites Hilfe Spiele Lust bis genießen.
Best view i have ever seen !
Best view i have ever seen !
Best view i have ever seen !
Best view i have ever seen !
This web page doesn’t show up properly on my blackberry – you might want to try and fix that
Youre so cool! I dont suppose Ive read anything such as this just before. So nice to locate somebody with some original ideas on this subject. realy we appreciate you starting this up. this web site are some things that is needed on-line, a person with a little originality. beneficial project for bringing new stuff to the world wide web!
if I were a frog, would this post make me jump? I think … maybe
since i have been running my own busines at home, i have always been monitoring business news on the internet and cable television.
bookmarked!!, I really like your web site!
Today, I went to the beach with my children. I found a sea shell and gave
it to my 4 year old daughter and said “You can hear the ocean if you put this to your ear.” She placed the shell to her ear and screamed.
There was a hermit crab inside and it pinched her ear. She never wants to go back!
LoL I know this is totally off topic but I had to tell someone!
If you happen to be nevertheless upon the fence: grab your preferred earphones, thoughts down to a Ideal Buy and request in the direction of plug them into a Zune then an iPod and look at which one seems much better to by yourself, and which interface tends to make by yourself smile a lot more. Then you can know which is straight for you.
It’s a shame you don’t have a donate button! I’d certainly donate to this outstanding blog! I guess for now i’ll settle for bookmarking and adding your RSS feed to my Google account. I look forward to new updates and will talk about this blog with my Facebook group. Chat soon!
I think this is a real great article post.Really thank you! Will read on…
Best view i have ever seen !
Best view i have ever seen !
Best view i have ever seen !
Ich weiß, dass die Genesung einige Zeit gedauert hat, was ziemlich normal ist, aber die Gesamtergebnisse nach der Operation sind großartig
Ja, man muss das digitale Marketing auslagern.
Thanks
Thanks
Loved every word
Good post as usual
Enjoyed the read
I couldn’t resist commenting. Exceptionally well written!
Best view i have ever seen !
Greetings! Very helpful advice within this post! It’s the little changes that will make the most important changes. Thanks a lot for sharing!
Best view i have ever seen !
Best view i have ever seen !
Best view i have ever seen !
Best view i have ever seen !
Somebody essentially help to make seriously articles I would state. This is the very first time I frequented your website page and thus far? I surprised with the research you made to make this particular publish incredible. Fantastic job!
I like what you guys are up also. Such clever work and reporting! Keep up the superb works guys I抳e incorporated you guys to my blogroll. I think it will improve the value of my site 🙂
An outstanding share! I have just forwarded this onto a friend who had been doing a little homework on this. And he in fact ordered me dinner simply because I stumbled upon it for him… lol. So allow me to reword this…. Thanks for the meal!! But yeah, thanx for spending the time to talk about this matter here on your web page.
Very informative post.Thanks Again. Really Great.