使用Java Mapstruct的模糊映射方法

时间:2019-02-09 18:23:41

标签: java mapstruct

我正在使用Java Mapstruct将实体映射到DTO

我想使用其他映射器中的一个,并且都用相同的签名实现相同的方法,因此我得到了“为映射属性找到了模糊映射方法”

我已经尝试在接口上实现共享方法,然后在两个映射器上扩展接口,但是问题仍然存在

我猜我将需要使用某种限定词。我在Google和官方文档中进行了搜索,但无法弄清楚如何应用该技术

// CHILD MAPPER ***
@Mapper(componentModel = "spring", uses = { })
public interface CustomerTagApiMapper {

CustomerTagAPI toCustomerTagApi(CustomerTag customerTag);

default OffsetDateTime fromInstant(Instant instant) {
    return instant == null ? null : instant.atOffset(ZoneOffset.UTC);
}
} 

// PARENT MAPPER ***
@Mapper(componentModel = "spring", uses = {  CustomerTagApiMapper.class })
public interface CustomerApiMapper {

CustomerAPI toCustomerApi(Customer customer);

default OffsetDateTime frmInstant(Instant instant) {
    return instant == null ? null : instant.atOffset(ZoneOffset.UTC);
}
}

1 个答案:

答案 0 :(得分:1)

使用限定符是解决此问题的一种方法。但是,您的问题是Observable<Response>方法实际上是一个util方法。

为什么不将该方法提取到某个静态util类中,并告诉两个映射器也要使用该类?

fromInstant

然后您的映射器可能如下所示:

public class MapperUtils {

    public static OffsetDateTime fromInstant(Instant instant) {
        return instant == null ? null : instant.atOffset(ZoneOffset.UTC);
    }
}