@SubclassMapping顺序

@SubclassMapping order

第一次使用MapStruct (1.5.0.Beta2)

假设我有以下 class 层次结构:C extends B extends ACdto extends Bdto extends Adto。以及以下映射器:

@Mapper(componentModel = "spring", subclassExhaustiveStrategy = RUNTIME_EXCEPTION)
public interface MyMapper{
    @SubclassMapping(source = B.class, target = Bdto.class)
    @SubclassMapping(source = C.class, target = Cdto.class)
    Adto map(A source);
}

当我映射一个 C 对象列表时,我实际上得到了一个 Bdto 列表。但是,如果我将顺序更改为:

@Mapper(componentModel = "spring", subclassExhaustiveStrategy = RUNTIME_EXCEPTION)
public interface MyMapper{
    @SubclassMapping(source = C.class, target = Cdto.class)
    @SubclassMapping(source = B.class, target = Bdto.class)
    Adto map(A source);
}

我得到了预期的 Cdto 列表。这是设计使然吗?有什么办法可以减少对注释顺序的依赖?

这是设计使然。 The reason for this is to let the user control the order for the mappings. 相同的行为用于 @Mapping 注释。

您的第一个示例也应该得到编译器警告,尽管它目前可能引用了错误的类型(目标而不是源)。这应该会在下一个版本中修复。