排除mapstruct中的特定字段

Dan*_*aub 2 java mapping mapstruct

当我尝试mapper在2 classesin 之间创建一个时mapstruct
我在warning编译代码时得到了:

src/main/java/mapstruct/DogMapper.java:15: warning: Unmapped target property: "otherField".
    Cat convert(Dog dog);
        ^
1 warning
Run Code Online (Sandbox Code Playgroud)

这是我要映射的两个对象:

@Getter
@Setter
public class Dog {
    private String say;
}
Run Code Online (Sandbox Code Playgroud)

@Getter
@Setter
public class Cat {
    private String say;
    private String otherField;
}
Run Code Online (Sandbox Code Playgroud)

这是我的Mapper

@Mapper
public interface DogMapper {
    DogMapper mapper = Mappers.getMapper( DogMapper.class );

    @Mapping(source = "say", target = "say")
    Cat convert(Dog dog);
}
Run Code Online (Sandbox Code Playgroud)

我阅读了mapstruct docs,我知道我可以通过多种方式排除此特定字段:

@Mapping(ignore = true, target = "otherField")
Run Code Online (Sandbox Code Playgroud)

或者通过这种方式:

@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
Run Code Online (Sandbox Code Playgroud)

但我的最终目的是要排除名为特定领域otherField
从我所有的映射器,但不排除我没有使用其他的领域。

有什么办法可以实现?

Fil*_*lip 6

您已经回答了自己的问题,并且不确定我是否正确理解了您。您只想输入@Mapping(ignore = true, target = "otherField")一次?

如果此字段在某些通用基类中,则可以使用“ 共享配置”。否则,您要做的事情@Mapping(ignore = true)就是走的路。

边注。您不必添加@Mapping(source = "say", target = "say")MapStruct即可自动映射具有相同名称的属性

  • 我正在尝试实现类似的目标,但我有几个不想映射的字段,并且如果可能的话,我想避免重复相同的“@Mapping”注释。基本上,我正在寻找类似 `@Mapping(ignore = true, target = ["id", "other", "another"])` 的东西。如今这可能吗? (6认同)