首页 文章

如何在 Map 阶段跳过一个字段?

提问于
浏览
3

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

假设两个类中都存在字段“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);

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

1 回答

  • 5

    看看条件映射的官方user manual .

    简而言之:

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

    • 来源:员工

    • 目的地: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存储库中找到此示例 . 作者已做了很多,并得到了很好的解释:

相关问题