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 繼承了相同的方法。刪除擴展為我解決了這個問題。因此,您可以通過多種方式查找自定義映射器接收到的方法。
添加回答
舉報