如何在地图阶段跳过一个字段?

use*_*036 3 modelmapper

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

假设两个类中都存在字段"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);
Run Code Online (Sandbox Code Playgroud)

请让我知道如何跳过映射/复制字段.

Pau*_*Pau 5

看一下条件映射的官方用户手册.

简单来说:

您需要添加一个新的Mapping并使用Condition.你的来源和声望将是:

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

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

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

然后添加Mapping并使用条件:

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

您可以在ModelMapper GitHub存储库中找到此示例.作者已经做了很多,并得到了很好的解释: