我有一个父类和子类,其各自的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
}
当我试图将父映射到父映射到父映射到父映射时,我得到了堆栈溢出错误。
请帮我解决这个问题。
我知道这篇文章很旧,但我会尽力给出一个答案,以防有人从谷歌到这里。
可能您有一个动态对象创建。
最近我遇到了这样的问题。在我的情况下,我有一个类学生,扩展人。人还有三种人的属性:父亲、母亲和责任。以防万一,我有一个循环关系。当我运行我的JUnits测试时,我收到了一个循环调用。我没有stakOverflow,因为Spring(过了一段时间)关闭了数据库连接。
我解决了从Person类中删除dynamics对象创建的问题。
解决此问题的另一种方法是在映射器中添加条件。您可以在这里阅读更多有关条件的信息。例如,您可以设置一些条件:“如果person属性id为10,则不需要映射它。”。这样我们可以避免无限映射。好吧,让我们看一些代码片段:
学生班级:
public class Student extends Person implements IStudent {
private Person financialResponsible;
// Getters and setters.
}
人物类:
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;
}
}
学生DTO类:
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.
}
以下是一个条件示例:
...
import org.modelmapper.Condition;
...
ModelMapper mapper = new ModelMapper();
// Define STRICT to give high precision on mapper.
mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
/*
* Create condithtml" target="_blank">ions to avoid infinity circularity.
*/
// Condidions.
final Condition<IStudent, StudentDTO> fatherIsTen = mappingContext -> mappingContext.getSource().getFather().getId() == 10;
final Condition<IStudent, StudentDTO> motherIsTen = mappingContext -> mappingContext.getSource().getMother().getId() == 10;
final Condition<IStudent, StudentDTO> resposibleIsTen = mappingContext -> mappingContext.getSource().getResponsible().getId() == 10;
// Adding conditions on mapper.
mapper.createTypeMap(IStudent.class, StudentDTO.class) //
.addMappings(mapper -> mapper.when(fatherIsTen).skip(StudentDTO::setFather))
.addMappings(mapper -> mapper.when(motherIsTen).skip(StudentDTO::setMother))
.addMappings(mapper -> mapper.when(resposibleIsTen).skip(StudentDTO::setResponsible));
我希望能对你有所帮助/
我与ModelMapper框架有麻烦。请解释为什么我看到以下行为。 我在build.gradle有以下依赖性 和一个类客户: 我还有一个地图绘制工具: 还有一个测试 在fred()中,方法输出是非红色的“Customer{name=fred,age=40}”(“Customer{name=null,age=40}”)。你能解释一下为什么吗?为什么我在第一个方法中看不到输出“George”?
我使用DTO和modelMapper是为了不让某些字段可见。我有一个类别实体,可以有子类别 创建类别时,我使用模型: 在此模型中,我希望parentCategoryKeyId与父对象的categoryKeyId匹配。 例如,如果我创建了一个“顶级”类别: 它返回给我: 当我这样做时: 在我的控制器中,我将其余对象传递给DTO层,该层调用服务: 我的类别是基本的POJO: 为我服务: 我的问题是,我
问题内容: 我正在寻找一种确定范围的方法 。 Golang规范指出以下内容: 未指定地图的迭代顺序,并且不能保证每次迭代之间都相同。如果在迭代过程中删除尚未到达的映射条目,则不会生成相应的迭代值。如果映射条目是在迭代过程中创建的,则该条目可能在迭代过程中产生或可以被跳过。对于创建的每个条目以及从一个迭代到下一个迭代,选择可能有所不同。如果映射为nil,则迭代次数为0。 我在StackOverflo
在映射上分配一些默认值 我知道我需要在地图中添加值 问题是我的循环不起作用。我需要从地图中添加value2,基于从那里的位置或从地图中添加value2
我目前正在尝试使用ModelMapper的映射方法执行实体到DTO的映射。在最深的属性映射上,映射结果为null,但它应该是一个对象。 以下是我的映射源实体(省略brevety的Loombok getter和setter): 以下是我的目标DTO(省略brevety的Loombok Getter和Setter): 在我的Controller类方法上,我这样做映射: My clientService
问题内容: 我有一个包含循环的对象图。我如何让JAXB处理呢?我尝试在子类中使用批注,但JAXB编组器仍检测到周期。 问题答案: 使用JAXB的好处是它是具有多个实现的标准运行时(就像JPA一样)。 如果使用EclipseLink JAXB(MOXy),则可以使用许多扩展来处理JPA实体,包括双向关系。这是使用MOXy @XmlInverseReference批注完成的。它的作用类似于元帅上的@X