1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > java多属性的map_java - 具有多个参数的MapStruct QualifiedByName - 堆栈内存溢出

java多属性的map_java - 具有多个参数的MapStruct QualifiedByName - 堆栈内存溢出

时间:2024-01-13 17:22:09

相关推荐

java多属性的map_java - 具有多个参数的MapStruct QualifiedByName - 堆栈内存溢出

目前,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));

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。