gpt4 book ai didi

java - ModelMapper:在运行时映射抽象类

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:01:48 25 4
gpt4 key购买 nike

我正在使用 ModelMapper Framework ( http://modelmapper.org/ ) 在 Java 中映射对象。我在映射包含抽象类的具体类(DTO 到实体)时遇到了问题。

例子:Task 有一个 AbstractItems 列表。
AbstractItems 是问题和标准。

public class TaskDTO {
...
private List<AbstractItemDTO> items;
}

映射方法:

// task is an TaskDTO object
return getModelMapper().map(task, TaskEntity.class);

ModelMapper 尝试创建 AbstractItem 的新实例,这会引发异常。有没有办法在运行时映射抽象类?
喜欢QuestionDTO -> Question, CriteriaDTO ->Criteria

最佳答案

我也遇到过这个问题,解决方法是:

public void configure(ModelMapper modelMapper) {
modelMapper.typeMap(QuestionDto.class, AbstractItem.class)
.setConverter(converterWithDestinationSupplier(Question::new));
modelMapper.typeMap(CriteriaDto.class, AbstractItem.class)
.setConverter(converterWithDestinationSupplier(Criteria::new));
}

private <S, D> Converter<S, D> converterWithDestinationSupplier(Supplier<? extends D> supplier ) {
return ctx -> ctx.getMappingEngine().map(ctx.create(ctx.getSource(), supplier.get()));
}

Converter 使用供应商创建所需的实例,然后使用正确的类型映射(QuestionDto -> Question 或 CriteriaDto -> Criteria)映射所有属性。

关于java - ModelMapper:在运行时映射抽象类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28111875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com