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

2023-12-31

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

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

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

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


看看官方的用户手册 http://modelmapper.org/user-manual/property-mapping/#conditional-mapping条件映射。

简单来说:

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

  • 来源:员工
  • 目的地: 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 https://github.com/jhalterman/modelmapper/blob/2f5ee77beaaee8efb2188f2c8afa88b9dbbc0649/core/src/test/java/org/modelmapper/functional/conditional/ConditionalMapping2.java对于上面的例子
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在地图阶段跳过某个字段? 的相关文章

随机推荐