java多属性的map_java - 具有多个参数的MapStruct QualifiedByName - 堆栈内存溢出
目前,MapStruct不支持具有多個(gè)源屬性的映射方法。
但是,在您的情況下,您可以使用1.2.0中的@Context 。 根據(jù)我的理解, projId和code就像映射的幫助器一樣,它們不用于映射目標(biāo)屬性。
所以你可以做一些事情(它應(yīng)該在理論上起作用):
@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;
}
}
另一種方法是將所有這些屬性提取到一個(gè)單獨(dú)的類中并傳遞它(這將允許多個(gè)相同類型的參數(shù))。
該課程如下:
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;
}
}
然后,您可以調(diào)用mapper,如: mapper.createOne(one, new Filter(projId, val, code));
總結(jié)
以上是生活随笔為你收集整理的java多属性的map_java - 具有多个参数的MapStruct QualifiedByName - 堆栈内存溢出的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: onSubmit的使用
- 下一篇: 若依框架学习笔记