使用mapStruct映射抽象类

时间:2020-03-09 12:54:40

标签: spring mapstruct

我有一个项目,其中有一个Library实体,其中包含类型为media的字段MediaMedia是一个抽象类,由类Image和类Video实现。

我还有一个dto LibraryDto,其字段media的类型为MediaDtoMediaDto包含一个字段,其值可以为"image""video"。我的问题是:如何根据Image的{​​{1}}字段的值告诉mapstruct实例化Video类还是type类?

感谢您的回复。

1 个答案:

答案 0 :(得分:1)

对不起,我第一次误解了你的问题。

您可以创建对象工厂方法,该方法基于Media字段实例化type,如下所示:

@Mapper
public interface LibraryMapper {
    Library libraryDtoToLibrary(LibraryDto libraryDto);

    Media mediaDtoToMedia(MediaDto mediaDto);

    @ObjectFactory
    default Media createMedia(MediaDto mediaDto) {
        if ("image".equals(mediaDto.getType())) {
            return new Image();
        } else if ("video".equals(mediaDto.getType())) {
            return new Video();
        }
        throw new IllegalArgumentException("Unknown media type.");
    }
}