我的父母和子女班级各自的DTO如下
class Parent {
List<Child> children;
// setters and getters
}
class Child {
Parent parent;
}
class ParentDto {
List<ChildDto> children;
// setters and getters
}
class ChildDto {
ParentDto parent;
// setters and getters
}
当我尝试将Parent映射到ParentDto时,我得到了StackOverflowError。
请帮我解决问题。
答案 0 :(得分:0)
我知道这篇文章很旧,但是我会尝试给出一个答案,以防Google有人到达这里。
可能您创建了动态对象。
最近我遇到了这样的问题。在我的情况下,我有一个扩展Person的学生班。而“人”具有“人”类型的其他三个属性:父亲,母亲和负责任的人。万一我有一个圆形关系。当我运行JUnits测试时,我得到了一个循环调用。我没有得到stakOverflow,因为Spring(一段时间后)关闭了数据库连接。
我解决了这个问题,从我的Person类中删除了动态对象的创建。
解决此问题的另一种方法是在映射器中添加条件。您可以阅读有关条件here的更多信息。例如,您可以使用一些条件说:“如果person属性id为10,则不需要映射它。”。这样我们可以避免无限映射。 好吧,让我们看一些代码片段:
学生班:
export const MyComponent:React.SFC<MyComponentProps> = ({ prop1, prop2, prop3 }) => (
<div>
{ prop1 ? prop2 : prop3 }
</div>
);
人员班:
public class Student extends Person implements IStudent {
private Person financialResponsible;
// Getters and setters.
}
StudentDTO类:
public class Person implements IPerson {
private Long id;
private String name;
private Person father;
private Person mother;
private Person responsible;
private Address address;
// Getters and setters.
// This is my real problem. I removed it and the mapper worked.
public IPerson getFather() {
if (father == null) father = new Person();
return father;
}
}
PersonDTO类:
public class StudentDTO extends PersonDTO {
private PersonDTO financialResponsible;
// Getters and setters.
}
以下是条件的示例:
public class PersonDTO {
private Long id;
private String name;
private PersonDTO father;
private PersonDTO mother;
private PersonDTO responsible;
private AddressDTO address;
// Getters and setters.
}
希望对您有帮助