3

我有员工对象列表 - 列表我需要将其转换为员工转移对象列表 - 列表

假设两个类中都存在一个字段“密码”。

  • 在少数情况下,我需要从 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);

请让我知道如何跳过有关映射/复制的字段。

4

2 回答 2

6

查看条件映射的官方用户手册

简单来说:

您需要添加新的映射并使用条件。您的来源和目的地将是:

  • 资料来源:员工
  • 目的地:EmployeeDto

首先创建和自定义您的条件。它会是这样的:

Condition<?, ?> isNotZero = new Condition<PersonDTO, Employee>() {
    public boolean applies(MappingContext<PersonDTO, Employee> context) {
      //Your conidition
      return context.getSource().getEmployeeId() != 0;
    }
  };

然后添加映射并使用条件:

modelMapper.addMappings(new PropertyMap<PersonDTO, Person>() {
      protected void configure() {
        when(isNotZero).map(source).setEmployee(null);
      }
    });

您可以在 ModelMapper GitHub 存储库中找到此示例。作者做了一些更多的事情,并得到了很好的解释:

于 2016-08-02T19:58:14.353 回答
3

以下是我在映射阶段跳过字段的方式:

    ModelMapper modelMapper = new ModelMapper();

    modelMapper.typeMap(EmployeeDTO.class,Employee.class).addMappings(mapper -> {
        mapper.skip(Employee::setPassword);
    });
于 2019-12-09T16:11:56.287 回答