【问题标题】:Mapping abstract class with mapStruct使用 mapStruct 映射抽象类
【发布时间】:2020-03-17 21:38:10
【问题描述】:

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

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

感谢您的回复。

【问题讨论】:

    标签: spring mapstruct


    【解决方案1】:

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

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

    @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.");
        }
    }
    

    【讨论】:

    • 是的,这就是这样做的方法。此外,我会用@Named 注释非默认方法,以便您可以重用映射器
    猜你喜欢
    • 2020-07-07
    • 2021-11-28
    • 2023-01-31
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    相关资源
    最近更新 更多