Nuestro equipo de expertos despúes de muchos días de investigación y recopilar de información, hemos dado con la solución, queremos que te sea de gran utilidad para tu trabajo.
Solución:
lo he resuelto He hecho un serializador personalizado. Entonces, en el grupo, serializaré a los estudiantes configurando una anotación personalizada @JsonSerialize(usando = CustomStudentSerializer.class)
CustomStudentSerializer
public class CustomStudentSerializer extends StdSerializer>
public CustomStudentSerializer()
this(null);
public CustomStudentSerializer(Class> t)
super(t);
@Override
public void serialize(
List students,
JsonGenerator generator,
SerializerProvider provider)
throws IOException, JsonProcessingException
List studs = new ArrayList<>();
for (Student s : students)
s.setGroups(null);
studs.add(s);
generator.writeObject(studs);
Hizo lo mismo para los grupos. Acabo de eliminar el componente de estudiantes/grupo cuando la relación ya está anidada. Y ahora funciona bien.
Me tomó un tiempo resolver esto, pero lo publiqué aquí porque también puede ayudar a alguien más.
Utilizando el @JsonIgnoreProperties
anotación es otra alternativa:
@Entity
public class Student extends AbstractUser
@ManyToMany(fetch = FetchType.LAZY, targetEntity = Group.class)
@JoinTable(name = "GROUPS_STUDENTS",
joinColumns = @JoinColumn(name = "student_id") ,
inverseJoinColumns = @JoinColumn(name = "group_id") )
@JsonIgnoreProperties("students")
private List groups = new ArrayList();
@Entity
public class Group implements Item, Serializable
@ManyToMany(mappedBy = "groups", targetEntity = Student.class)
@JsonIgnoreProperties("groups")
private List students;
Encuentra la comparación entre @JsonManagedReference
+@JsonBackReference
, @JsonIdentityInfo
y @JsonIgnoreProperties
aquí: http://springquay.blogspot.com/2016/01/new-approach-to-solve-json-recursive.html
Para resolver la recursividad infinita de jackson puedes usar @JsonManagedReference
, @JsonBackReference
.
@JsonManagedReference es la parte delantera de la referencia, la que se serializa normalmente.
@JsonBackReference es la parte posterior de la referencia; se omitirá de la serialización.
Encuentre más detalles aquí: http://www.baeldung.com/jackson-bidireccional-relationships-and-infinite-recursion
public class Student extends AbstractUser
@ManyToMany(fetch = FetchType.LAZY, targetEntity = Group.class)
@JoinTable(name = "GROUPS_STUDENTS",
joinColumns = @JoinColumn(name = "student_id") ,
inverseJoinColumns = @JoinColumn(name = "group_id") )
@JsonManagedReference
private List groups = new ArrayList();
public class Group implements Item, Serializable
@ManyToMany(mappedBy = "groups", targetEntity = Student.class)
@JsonBackReference
private List students;
Si haces scroll puedes encontrar los informes de otros desarrolladores, tú todavía eres capaz insertar el tuyo si te gusta.