Mapstruct中使用@Named方法映射字段时能否仅传入部分参数?
结论:你给出的实现方式不可行
问题出在source = "."的使用上:当MapStruct映射方法包含多个参数时,"."代表的是包含所有参数的上下文对象,而你的sumThree方法需要的是三个独立的int参数,二者类型不匹配,会直接导致编译报错。
正确的实现方式
只需要去掉source = ".",MapStruct会自动根据@Named标注方法的参数名,匹配映射方法中对应的参数:
@Mapping(target = "ss", qualifiedByName = "sumThree") Trgt map(int a, int b, int c, int x, int y, int z); @Named("sumThree") static int sum(int a, int b, int c) { return a + b + c; }
MapStruct生成实现类时,会自动把map方法里的a、b、c参数传入sum方法,计算结果后赋值给Trgt对象的ss字段;其余参数(x、y、z)可以正常映射到目标对象的对应字段(如果目标类有定义的话)。
补充说明
如果后续需要扩展计算逻辑,比如要用到更多参数,只需在@Named方法中添加对应参数即可,MapStruct会自动匹配同名参数:
@Named("sumThreeWithX") static int sum(int a, int b, int c, int x) { return a + b + c + x; }
内容的提问来源于stack exchange,提问作者kain64b
相关产品推荐
相关产品推荐

