使用MapStruct遇构造器歧义问题求助
解决MapStruct中IdClient转Long的构造方法歧义问题
问题原因
MapStruct自动生成IdClient到Long的映射逻辑时,发现Long存在两个可匹配的构造方法(Long(long)、Long(String)),无法自动确定使用哪一个,因此抛出构造方法歧义错误。
解决方案
直接在映射器接口中为map方法提供默认实现,明确指定从IdClient提取id字段的逻辑,绕开MapStruct对构造方法的自动推断:
修改后的ClientMapper.java:
@ApplicationScoped public interface ClientMapper { @Mapping(source = "id", target = "idClient") ClientEntity IdClientToClientEntity(IdClient id); default Long map(IdClient id) { return id != null ? id.id() : null; } }
补充说明
- 给
IdClientToClientEntity方法添加@Mapping注解,明确字段映射关系(IdClient.id→ClientEntity.idClient),避免因字段名不匹配导致的映射失效。 - 默认方法的逻辑兼顾了空值安全,能处理
id为null的场景,同时完全消除了构造方法歧义问题。
内容的提问来源于stack exchange,提问作者Rodrigo Monterio
相关产品推荐
相关产品推荐

