提问者:小点点

MapStruct:对象类的映射


Class Source {
   private String type;
   private Object identifier;
}

标识符可以是类AppointmentIdentifier或JobIdentifier的对象; 我必须将源映射到目标,它有下面的结构。

Class Target {
    private String type;
    private Object identifierBO;
}

identifierBO可以是类AppointmentIdentifierBO或JobIdentifierBo的对象。 下面是我的映射器类:

@Mapper
public interface ModelMapper {

    Target toTarget(@NonNull final Source source);

    AppointmentIdentifierBO toAppointmentIdentifierBO(AppointmentIdentifier appointmentIdentifier);

    JobBO toJobBO(JobIdentifier jobIdentifier);
}

我知道,我缺少了一些配置,这些配置将有助于将identifierBO映射到identifierBO,但是没有帮助。


共1个答案

匿名用户

我只知道这样做:

@Mapper
public interface ModelMapper {
    @Mapping(source = "identifier", target = "identifierBO", qualifiedByName = "identifierMapping")
    Target toTarget(Source source);

    @Named("identifierMapping")
    default Object mapIdentifier(Object obj) {
        if (obj instanceof AppointmentIdentifier)
            return toAppointmentIdentifierBO((AppointmentIdentifier) obj);

        if (obj instanceof JobIdentifier)
            return toJobBO((JobIdentifier) obj);

        throw new RuntimeException("Not supported type: " + obj.getClass());
    }

    AppointmentIdentifierBO toAppointmentIdentifierBO(AppointmentIdentifier appointmentIdentifier);

    JobBO toJobBO(JobIdentifier jobIdentifier);
}

可怕? 是的。 管用? 是的。