【问题标题】:Map nested beans list : "org.mapstruct.Mapping"映射嵌套 bean 列表:“org.mapstruct.Mapping”
【发布时间】:2020-04-02 14:31:18
【问题描述】:

我想使用“org.mapstruct.Mapping”将Abc 类映射到AbcDTO

class Abc {
    private List<Xyz> xyz = null;
    private String uvw;
    private String cde;
}

class AbcDTO{
    private List<XyzDTO> xyz = null;
    private String uvw;
    private String cde;
}

class Xyz{
    private String type;
    private String value;
    private String docId;
}

class  XyzDTO{
    private String type;
    private String value;
    private DocDTO document;
}

我尝试使用注释来映射类:

    @Mappings({
            @Mapping(source = "xyz.docId", target = "xyz.doc")
    })
 abcDTO abcToabcDTO(abc abc)

有人可以帮助我如何遍历嵌套的bean并将docId映射到doc? 如果名称相同,它们会自动映射,但我想从 docId 映射到 doc。

【问题讨论】:

    标签: java spring spring-boot mapping mapstruct


    【解决方案1】:

    当你想要地图列表时,你可以定义它:

    @Mapping(source="docId", target="doc")
    XyzDTO xyzToXyzDTO(XyZ xyz);
    
    @Mapping(source="xyz", target="xyz") //useless if two lists got same name, but good for comprehention
    AbcDTO abcToAbcDTA(Abc abc);
    

    【讨论】:

    • 我想将 abc 映射到 abcDto 而不创建另一个抽象类 xyzToXyzDTO
    • 你不能使用@Mapper?喜欢:code@Mapper 公共抽象类 AbcDTOMapper { @Mapping(source="docId", target="doc") XyzDTO xyzToXyzDTO(XyZ xyz); @Mapping(source="xyz", target="xyz") //如果两个列表名称相同,则无用,但有助于理解 AbcDTO abcToAbcDTO(Abc abc); } code 并使用你唯一的 mapper.abcToAbcDTO(...) ?
    【解决方案2】:

    应该如下( 你可以试一试):

    @Mappings({
        @Mapping(target="doc", source="abc.docId")
      })
    AbcDTO abcToabcDTO(Abc abc);```
    
    

    【讨论】:

    • 它给出一个错误显示:错误:(25、37)java:源参数中不存在名为“abc.docId”的属性。您的意思是“abc.empty”吗?
    • Abc中有docId字段吗?
    猜你喜欢
    • 2017-05-25
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 2016-02-12
    • 2020-04-01
    • 2020-04-06
    • 1970-01-01
    • 2019-01-19
    相关资源
    最近更新 更多