mapstruct和泛型转换定义

h9vpoimq  于 2021-07-23  发布在  Java
关注(0)|答案(0)|浏览(1969)

我试图在测试应用程序中处理模型到数据转换(反之亦然),但我发现,如果为了方便起见,我定义了一个通用接口来保存转换方法,配置将不会应用,转换将失败。
配置:

@MapperConfig(
        unmappedTargetPolicy = ReportingPolicy.IGNORE
)
public interface MapperConfigurations {

    @Mapping(source = "externalId", target = "id")
    BasePayload defaultFromModel(PersistentEntity model);

    @InheritInverseConfiguration
    @Mapping(source = "id", target = "externalId")
    PersistentEntity defaultToModel(BasePayload payload);
}

Map方法的泛型定义

public interface MappingOperations<T extends PersistentEntity, V extends BasePayload> {

    V defaultFromModel(T model);

    T defaultToModel(V payload);
}

以及混凝土类的Map器:

@Mapper(config = MapperConfigurations.class)
public interface MappingOperations<T extends PersistentEntity, V extends BasePayload> {

    V defaultFromModel(T model);

    T defaultToModel(V payload);
}

使用此配置,我遇到了两个问题:

java: Can't map property "Long id" to "UUID id". Consider to declare/implement a mapping method: "UUID map(Long value)".

Can't generate mapping method for a generic type variable source

很明显,这个配置没有应用到转换器上。
重要的是,dto和model类都有超类型,其边界类型与mappingoperations类的泛型定义的边界类型相同。
这不是必须的,但更重要的是要理解这个流是如何工作的,如果必须在Map器中声明转换方法,或者我们可以使用我上面展示的泛型来减少重复的代码。
整个项目可以在这里找到:https://github.com/arthurgregorio/mini-budget

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题