我试图在测试应用程序中处理模型到数据转换(反之亦然),但我发现,如果为了方便起见,我定义了一个通用接口来保存转换方法,配置将不会应用,转换将失败。
配置:
@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
暂无答案!
目前还没有任何答案,快来回答吧!