2 回答
TA贡献1831条经验 获得超9个赞
我检查了您的示例。问题是您尝试定位的字段是字符串类型。
所以:
public class IvpVodOfferStatusDTO {
private String seasonNumber;
private String episodeNumber;
}
MapStruct 尝试将其与您提供的签名匹配:
@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;
}
MapStruct 有一个预定义的尝试顺序:
用户提供的映射方法
直接(源-目标类型相同)
映射方法(内置)
类型转换
如果这一切都失败了,MapStruct 会尝试执行一些 2 步方法:
映射方法 - 映射方法
映射方法——类型转换
类型转换-映射方法
在 6. 它找到了 2 个限定方法 ( Program
to String
)。这可能是 MapStruct 中的一个错误,它选择了不符合条件的方法(需要检查这是否是故意的)@Named
。否则,我会写一个问题。
最简单的解决方案是:调整目标:
public class IvpVodOfferStatusDTO {
private Integer seasonNumber;
private Integer episodeNumber;
}
什么可能是你想要的(我猜).. 否则你可以改变签名不返回一个Integer但String
TA贡献1811条经验 获得超5个赞
我遇到了同样的问题并观察到,我的映射器类使用 @Mapper(uses = {BaseMapper.class}) 并使用扩展 BaseMapper 继承了相同的方法。删除扩展为我解决了这个问题。因此,您可以通过多种方式查找自定义映射器接收到的方法。
添加回答
举报