本文共 1437 字,大约阅读时间需要 4 分钟。
目前,MapStruct不支持具有多个源属性的映射方法。
但是,在您的情况下,您可以使用1.2.0中的@Context 。 根据我的理解, projId和code就像映射的帮助器一样,它们不用于映射目标属性。
所以你可以做一些事情(它应该在理论上起作用):
@Mapper
public interface OneMapper {
@Mapping(target="id", source="one.id")
@Mapping(target="qualified", qualifiedByName="checkQualifiedNamed")
OneDto createOne (One one, @Context Integer projId, @Context String code);
@Named("checkQualifiedNamed")
default Boolean checkQualified (One one, @Context Integer projId, @Context String code) {
if(one.getProjectId() == projId && one.getCode().equalsIgnoreCase(code)) {
return Boolean.TRUE;
}
return Boolean.FALSE;
}
}
另一种方法是将所有这些属性提取到一个单独的类中并传递它(这将允许多个相同类型的参数)。
该课程如下:
public class Filter {
private final Integer projId;
private final Integer val;
private final String code;
public Filter (Integer projId, Integer val, String code) {
this.projId = projId;
this.val = val;
this.code = code;
}
//getters
}
您的映射器将如下所示:
@Mapper
public interface OneMapper {
@Mapping(target="id", source="one.id")
@Mapping(target="qualified", qualifiedByName="checkQualifiedNamed")
OneDto createOne (One one, @Context Filter filter);
@Named("checkQualifiedNamed")
default Boolean checkQualified (One one, @Context Filter filter) {
if(one.getProjectId() == filter.getProjId() && one.getVal() == filter.getVal() && one.getCode().equalsIgnoreCase(filter.getCode())) {
return Boolean.TRUE;
}
return Boolean.FALSE;
}
}
然后,您可以调用mapper,如: mapper.createOne(one, new Filter(projId, val, code));
转载地址:https://blog.csdn.net/weixin_30679649/article/details/114797014 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!