개체의 JSON 직렬화에 문제가 있습니다. 개체가 제대로 구축 (I는 "그것은 모든 데이터가 디버깅 적이 있지만, 그것이 있어야로 직렬화 아니에요). Java Spring에서 여러 OneToMany 컬렉션을 JSON에 직렬화
이 학생 클래스가
public class Student extends AbstractUser {
...
@OneToMany(mappedBy = "student", fetch = FetchType.EAGER, targetEntity = ActivityAttendance.class, cascade = CascadeType.ALL)
@Fetch(value = FetchMode.SUBSELECT)
private List<ActivityAttendance> attendances;
@OneToMany(mappedBy = "student", fetch = FetchType.EAGER, targetEntity = ActivityGrade.class, cascade = CascadeType.ALL)
@Fetch(value = FetchMode.SUBSELECT)
private List<ActivityGrade> grades;
...
}
사용자 정의 학생 시리얼 (
를 사용 ActivityAttendance에 의해, ActivityGrade 클래스는 무한 재귀) 여기public class CustomStudentSerializer extends StdSerializer<Student> {
...
@Override
public void serialize(
Student student,
JsonGenerator generator,
SerializerProvider provider)
throws IOException, JsonProcessingException {
...
student.setAttendances(null);
student.setGrades(null);
...
generator.writeObject(student);
}
}
내가 액티브에 포함 된 학생들 속성의 출석/성적 제거를 제거하는 ActivityAttendance, ActivityGrade 객체
그러나 JSON 출력은 항상 두 개의 모음 중 하나의 결과 만 반환합니다. 성적 입력란에는 개체 목록도 포함되어야하지만 항상 null을 반환합니다.
{
"id": 1,
"firstName": "test",
"lastName": "test",
"email": "[email protected]",
"attendances": [
{
"id": {},
"student": {
...
},
"activity": {
...
}
}
],
"grades": null
}
요소를 표시하는 성적 필드가 필요합니다. 컨트롤러에는 객체가 모든 데이터를 가지고 있습니다.
참석 필드를 제거하면 등급이 올바르게 표시됩니다. 이 문제를 일으키는 원인이 무엇인지, 어떻게 해결할 수 있습니까? 고맙습니다.
나는 해냈다. ModelMapper를 사용하여 Student에서 Student로 맵핑 한 다음 이제는 정상적으로 작동합니다. 난 아직도 왜 이런 식으로 작동하는지 이해하지 못합니다 (주석이없는 거의 동일한 객체이기 때문에). 그러나 좋은 해결책입니다. 감사. –
다행이었습니다. 'GET' 또는'POST'를 통해'Entity'를 리턴해서는 안됩니다. 제 의견으로는 이것이 올바른 방법이며 훨씬 더 쉽고 편리합니다. –