如何在地图阶段跳过一个字段?
How to skip a field during map stage?
我有员工对象列表 - 列表
我需要将其转换为员工调动对象列表 - List
假设字段 "password" 存在于 类.
- 在少数情况下,我需要从 Employee → EmployeeDTO 中包含密码
- 在少数情况下我不需要密码并希望从 Employee - EmployeeDTO 中排除。
示例代码片段:
List<Employee> employees = employeeRepository.findAll();
// Define the target type
Type targetListType = new TypeToken<List<EmployeeDTO>>() {}.getType();
List<EmployeeDTO> employeeDTOs = modelMapper.map(employees, targetListType);
请告诉我如何跳过 mapping/copying 上的字段。
看看Conditional Mapping的官方user manual
简而言之:
您需要添加新的映射并使用条件。您的来源和目的地将是:
- 资料来源:员工
- 目的地:EmployeeDto
首先创建和自定义您的条件。应该是这样的:
Condition<?, ?> isNotZero = new Condition<PersonDTO, Employee>() {
public boolean applies(MappingContext<PersonDTO, Employee> context) {
//Your conidition
return context.getSource().getEmployeeId() != 0;
}
};
然后添加Mapping并使用条件:
modelMapper.addMappings(new PropertyMap<PersonDTO, Person>() {
protected void configure() {
when(isNotZero).map(source).setEmployee(null);
}
});
您可以在 ModelMapper GitHub 存储库中找到此示例。作者做的比较少,解释的也很好:
- Link 到上面的例子
以下是我在映射阶段跳过字段的方式:
ModelMapper modelMapper = new ModelMapper();
modelMapper.typeMap(EmployeeDTO.class,Employee.class).addMappings(mapper -> {
mapper.skip(Employee::setPassword);
});
我有员工对象列表 - 列表 我需要将其转换为员工调动对象列表 - List
假设字段 "password" 存在于 类.
- 在少数情况下,我需要从 Employee → EmployeeDTO 中包含密码
- 在少数情况下我不需要密码并希望从 Employee - EmployeeDTO 中排除。
示例代码片段:
List<Employee> employees = employeeRepository.findAll();
// Define the target type
Type targetListType = new TypeToken<List<EmployeeDTO>>() {}.getType();
List<EmployeeDTO> employeeDTOs = modelMapper.map(employees, targetListType);
请告诉我如何跳过 mapping/copying 上的字段。
看看Conditional Mapping的官方user manual
简而言之:
您需要添加新的映射并使用条件。您的来源和目的地将是:
- 资料来源:员工
- 目的地:EmployeeDto
首先创建和自定义您的条件。应该是这样的:
Condition<?, ?> isNotZero = new Condition<PersonDTO, Employee>() {
public boolean applies(MappingContext<PersonDTO, Employee> context) {
//Your conidition
return context.getSource().getEmployeeId() != 0;
}
};
然后添加Mapping并使用条件:
modelMapper.addMappings(new PropertyMap<PersonDTO, Person>() {
protected void configure() {
when(isNotZero).map(source).setEmployee(null);
}
});
您可以在 ModelMapper GitHub 存储库中找到此示例。作者做的比较少,解释的也很好:
- Link 到上面的例子
以下是我在映射阶段跳过字段的方式:
ModelMapper modelMapper = new ModelMapper();
modelMapper.typeMap(EmployeeDTO.class,Employee.class).addMappings(mapper -> {
mapper.skip(Employee::setPassword);
});