📌  相关文章
📜  ModelMapper 跳过字段 codegrepper (1)

📅  最后修改于: 2023-12-03 15:02:58.960000             🧑  作者: Mango

使用 ModelMapper 跳过字段

在使用 Java 开发过程中,处理对象之间的映射是常用的操作。ModelMapper 是一个常用的 Java 映射库,它可以自动化映射并转换 Java 对象之间的数据。

然而,在一些特殊情况下,我们需要忽略某些字段的映射,这时就可以使用 ModelMapper 提供的 ConditionConverter 来实现。本文将着重介绍如何使用 Condition 来跳过特定字段的映射。

跳过单个字段的映射

如果需要跳过一个特定的字段,可以使用 Condition 对该字段进行判断,当满足特定条件时跳过映射。

ModelMapper mapper = new ModelMapper();
mapper.getConfiguration()
      .setPropertyCondition(Conditions.isNotNull())
      .setSkipNullEnabled(true);

Foo source = new Foo();
source.setCodegrepper("bar");

Bar destination = mapper.map(source, Bar.class);

上述代码中,我们利用 setPropertyCondition 方法将映射条件设置为非 null 值。由于 source 对象的 codegrepper 字段为非 null 值,因此该字段的值会被成功映射到 destination 对象中。

现在修改 source 对象的 codegrepper 字段为 null:

source.setCodegrepper(null);
Bar destination = mapper.map(source, Bar.class);

这时,由于 setPropertyCondition 方法将映射条件设置为非 null 值,codegrepper 字段的值将被跳过,转而使用 destination 对象的默认值。

跳过多个字段的映射

如果需要跳过多个字段的映射,可以利用 Condition 组合多个判断条件。

ModelMapper mapper = new ModelMapper();
PropertyMap<Foo, Bar> propertyMap = new PropertyMap<Foo, Bar>() {
    @Override
    protected void configure() {
        when(Conditions.or(
            Conditions.isNull(),
            Conditions.isEmptyString()            ))
            .skip().setCodegrepper(null);
        }
    };
    mapper.addMappings(propertyMap);
 
    Foo source = new Foo();
    source.setCodegrepper(null);
    source.setOtherField("");

    Bar destination = mapper.map(source, Bar.class);

上述代码中,我们创建了一个 FooBar 的映射,并在 when 条件中组合了两个条件:source 对象的 codegrepper 字段为 null 或空字符串时,跳过映射并将 destinationcodegrepper 字段设置为 null 值。

因此,由于 source 对象的 codegrepper 字段为 null,otherField 字段为空字符串,两个字段的映射都会被跳过。

结论

通过整个文档的阅读,我们可以学习到 ModelMapper 库的基本使用,在特定情况下如何跳过特定字段的映射,并且进行了详细的讲解和代码演示。