【问题标题】:How to skip a field during map stage?如何在地图阶段跳过字段?
【发布时间】:2016-06-08 09:28:51
【问题描述】:

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

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

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

请告诉我如何跳过映射/复制字段。

【问题讨论】:

    标签: modelmapper


    【解决方案1】:

    看一下条件映射的官方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 上面的例子

    【讨论】:

      【解决方案2】:

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

          ModelMapper modelMapper = new ModelMapper();
      
          modelMapper.typeMap(EmployeeDTO.class,Employee.class).addMappings(mapper -> {
              mapper.skip(Employee::setPassword);
          });
      

      【讨论】:

      • 这符合吗?
      猜你喜欢
      • 2020-05-29
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      相关资源
      最近更新 更多