mapstruct在expression使用时网上说有如下问题:
https://blog.csdn.net/BruceChao5211/article/details/105430093
http://www.kailing.pub/article/index/arcid/262.html
上面两篇文章原意都是说expression定义的方法会复用到所有同类型的其他属性上。
例如我定义一个toConvert方法,传入的参数类型是String,那么mapstruct代码生成器会自动将映射的原类中的属性都赋予toConvert方法。这样会导致我本意只针对某一个属性执行toConvert方法,结果所有同类型属性都被执行。
两篇文章都没有很好的说明这种情况我们应该怎么处理?
mapstruct官方的issue给出了答案:https://github.com/mapstruct/mapstruct/issues/2700
其实expression在mapstruct的本意就是用来对同类型进行处理的,如果需要指定到某个属性进行某个方法的调用,我们需要采用qualifiedByName来处理。例如如下示例:
[code="java"]
@Mappings({
@Mapping(source = "sex1",target = "sex2",qualifiedByName = {"getBySexEnum"})
})
Student2 toStudent2(Student1 student1);
@Named("getBySexEnum")
default Integer getBySexEnum(SexEnum sexEnum){
return sexEnum.getCode();
}
[/code]