【发布时间】:2019-07-04 12:59:00
【问题描述】:
我正在使用 mapstruct 从一个 DTO 映射到另一个。我有多个默认方法,但其中 2 个返回值为 String 并且使用与输入参数相同的类给我“使用 java Mapstruct 的模糊映射方法”错误。我在这里添加代码的相关部分:
@Mappings({
@Mapping(source = "programInstance", target = "title", qualifiedByName = "title"),
@Mapping(source = "programInstance", target = "seriesName", qualifiedByName = "seriesName"),
@Mapping(source = "programInstance", target = "season", qualifiedByName = "season"),
@Mapping(source = "programInstance", target = "epNumber", qualifiedByName = "epNumber"),
})
DTO1 mapDTOs (DTO2 dto2);
@Named("title")
default String mapTitle(Program programInstance) {
Optional<String> title = Utils.getObject(() -> programInstance.getTitle().getDescriptions().get(0).getValue());
if (title.isPresent())
return title.get();
return null;
}
@Named("seriesName")
default String mapSeriesName(Program programInstance) {
Optional<String> seriesName = Utils.getObject(() -> programInstance.get(0).getProgram().getTitle().getDescriptions().get(0).getValue());
if (seriesName.isPresent())
return seriesName.get();
return null;
}
@Named("season")
default Integer mapSeasonNumber(Program programInstance) {
Optional<Integer> season = Utils.getObject(() -> programInstance.get(0).getSeasonOf().get(0).getOrderNo());
if (season.isPresent())
return season.get();
return null;
}
@Named("epNumber")
default Integer mapEpNumber(Program programInstance) {
Optional<Integer> epNumber = Utils.getObject(() -> programInstance.getEpOf().get(0).getOrderNo());
if (epNumber.isPresent())
return epNumber.get();
return null;
}
错误是
映射属性“程序”的映射方法不明确 programInstance" 到 java.lang.String: java.lang.String mapTitle(), java.lang.String mapSeriesName().
【问题讨论】:
-
您确定您使用的是
org.mapstruct.Named而不是其他的吗? -
@Filip 是的,我正在使用 org.mapstruct.Named
-
刚刚在我们的 1.3 代码库上验证了您的示例。它有效
-
但是.. 我还发现方法的名称有偏差..
mapSeriesName.. 你的例子有一个签名mapSeriesName1.. 你有没有机会指向一个用过的映射器?是否有更多方法携带相同的@Named? -
sjaak:那是一种类型,抱歉,编辑了代码。我的版本是 1.2,现在尝试更改为 1.3 - 错误仍然存在.. 是的,我有更多带有相同源程序的 @Named 方法..