You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MapStruct如何自动将嵌套对象属性映射至目标对象对应属性?

问题:MapStruct能否自动映射嵌套对象的所有属性?

假设我们有以下类定义:

class Person { 
    String firstName; 
    String lastName; 
} 

class PersonBLO { 
    Person person; 
    Integer foo; // 计算得出的业务属性
} 

class PersonDTO { 
    String firstName; 
    String lastName; 
    Integer foo; 
}

目前我写的映射器是这样的:

@Mapping(target = "firstName", source = "person.firstName") 
@Mapping(target = "lastName", source = "person.lastName") 
PersonDTO personBLOToPersonDTO(PersonBLO personBLO);

请问有没有办法自动把所有person.*属性映射到对应的*属性上,不用逐个写@Mapping?


当然可以!

MapStruct专门提供了简洁的语法来处理这种嵌套对象的批量映射,完全不用手动逐个声明属性映射。

你只需要用@Mapping指定嵌套对象作为源,同时把target设为.(代表目标对象本身),MapStruct就会自动匹配嵌套对象和目标对象的同名属性:

@Mapping(target = ".", source = "person")
PersonDTO personBLOToPersonDTO(PersonBLO personBLO);

这样一来:

  • Person里的firstName和lastName会自动映射到PersonDTO的对应属性
  • PersonBLO里的foo属性因为和PersonDTO的foo同名,也会被自动映射,不需要额外配置

如果之后遇到个别属性名不匹配的情况,只需要在这个基础上额外加单独的@Mapping就行,比如:

@Mapping(target = ".", source = "person")
@Mapping(target = "fullName", source = "person.fullNameInPerson") // 示例:属性名不同的特殊情况
PersonDTO personBLOToPersonDTO(PersonBLO personBLO);

另外要注意,这种语法在MapStruct 1.3及以上版本都支持,确保你的项目依赖的是合适的版本,并且编译时正确配置了MapStruct的注解处理器,这样才能生成正确的映射实现代码。

内容的提问来源于stack exchange,提问作者JIN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:05:51