在我的@Mapper类中,我有以下方法:

@Mapping(source = "localCar.color", target = "color")
@Mapping(source = "blueBookCar.price", target = "price")
@Mapping(source = "localCar.features", target = "features", qualifiedByName = "mapFeatures") 
abstract CarDto from(LocalCar localCar, BlueBookCar blueBookCar);

@Named("mapFeatures")
Map<Long, Feature> mapFeatures(Map<Group, Feature> features, BlueBookCar blueBookCar) {
 // do stuff with both blueBookCar and features from localCar
}

但是,我得到了一个编译错误,指出没有找到map struct方法mapFeatures(Map).

this post开始,我try 将@Context blueBookCar用于这两种方法,但随后得到了一个错误,即它可用于在from方法中进行映射.

我能找到的唯一解决方案是传入blueBookCar两次,一次用@Context注释,一次不带注释:

@Mapping(source = "localCar.color", target = "color")
@Mapping(source = "blueBookCar.price", target = "price")
@Mapping(source = "localCar.features", target = "features", qualifiedByName = "mapFeatures") 
abstract CarDto from(LocalCar localCar, BlueBookCar blueBookCar, @Context BlueBookCar blueBookCar2)

@Named("mapFeatures")
Map<Long, Feature> mapFeatures(Map<Group, Feature> features, @Context BlueBookCar blueBookCar2) {
 //do stuff with both blueBookCar and features from localCar
}

如何在@Mapping@Named方法中使用参数进行映射?

推荐答案

据我所知,使用@Named个方法还不支持具有多个源属性的映射方法.

但是,您可以使用Java表达式解决方法:

@Mapper
public abstract class CardMapper {

    @Mapping(target = "color", source = "localCar.color")
    @Mapping(target = "price", source = "blueBookCar.price")
    @Mapping(target = "features", expression = "java(mapFeatures(localCar, blueBookCar))")
    public abstract CarDto from(LocalCar localCar, BlueBookCar blueBookCar);

    protected Map<Long, Feature> mapFeatures(LocalCar localCar, BlueBookCar blueBookCar) {
        //do stuff with both blueBookCar and features from localCar
    }
}

Java相关问答推荐

具有默认分支的JUnit代码覆盖率切换声明

BiPredicate和如何使用它

DTO到实体,反之亦然,控制器和服务之间的哪一层应该处理转换?

具有多种令牌类型和段的复杂Java 17正则表达式

基于调车场算法的科学计算器

为什么Java Annotation接口覆盖对象类中的方法

如何修复PDF重建过程中的文本定位

带有Health Check的Spring Boot BuildPack打破了本机映像构建过程

Spring-Boot Kafka应用程序到GraalVM本机映像-找不到org.apache.kafka.streams.processor.internals.DefaultKafkaClientSupplier

支持MySQL 5.6的最新Hibernate版本

舰队运行配置Maven版本

根本不显示JavaFX阿拉伯字母

将关闭拍卖的TimerService

对从Spring Boot 3.1.5升级到3.2.0的方法的查询验证失败

如何调整JButton的大小以适应图标?

在实例化中指定泛型类型与不指定泛型类型之间的区别

保持标题窗格的箭头可见,即使设置为不可折叠

使用StringBuilder和append方法创建字符串时Java字符串内部方法的问题

如何在Java中正确实现填字游戏求解器

在java中使用SevenZip.openArchive方法后无法删除文件