<properties>
<org.mapstruct.version>1.5.2.Final</org.mapstruct.version>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>8</source>
<target>8</target>
<encoding>UTF-8</encoding>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
定义两个相同的对象: SourceObject 和TargetObject
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SourceObject {
private String sourceName;
private SourceAddrInfo sourceAddrInfo;
private List<SourceDetailInfo> sourceDetailInfoList;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class SourceAddrInfo{
private String sourceAddr;
}
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class SourceDetailInfo{
private String sourceDetail;
}
}
定义转换接口 interface BuilderConverter
@Mapper
public interface BuilderConverter {
BuilderConverter INSTANCE = Mappers.getMapper(BuilderConverter.class);
@Mapping(source = "sourceName" , target = "targetName")
TargetObject converterParam(SourceObject sourceObject);
@Mapping(source = "sourceAddr" , target = "targetAddr")
TargetObject.TargetAddrInfo converterAddrInfo(SourceObject.SourceAddrInfo sourceAddrInfo);
@Mapping(source = "sourceDetail" , target = "targetDetail")
TargetObject.TargetDetailInfo convertDetailInfo(SourceObject.SourceDetailInfo sourceDetailInfo);
@Mappings({
@Mapping(source = "sourceName", target = "targetName"),
@Mapping(source = "sourceAddrInfo" , target = "targetAddrInfo"),
@Mapping(source = "sourceDetailInfoList" , target = "targetDetailInfoList")
})
TargetObject converterObjectMappings(SourceObject sourceObject);
}
测试类:
SourceObject sourceObject = SourceObject.builder().sourceName("sourceName").build();
TargetObject targetObject = INSTANCE.converterParam(sourceObject);
System.out.println(sourceObject);
System.out.println(targetObject);
System.out.println("==========");
SourceObject.SourceAddrInfo sourceAddrInfo = SourceObject.SourceAddrInfo.builder()
.sourceAddr("sourceAddr")
.build();
TargetObject.TargetAddrInfo targetAddrInfo = INSTANCE.converterAddrInfo(sourceAddrInfo);
System.out.println("---------验证Addr对象----------");
System.out.println(sourceAddrInfo);
System.out.println(targetAddrInfo);
System.out.println("==========");
SourceObject.SourceDetailInfo sourceDetail = SourceObject.SourceDetailInfo.builder().sourceDetail("sourceDetail").build();
TargetObject.TargetDetailInfo targetDetailInfo = INSTANCE.convertDetailInfo(sourceDetail);
System.out.println(sourceDetail);
System.out.println(targetDetailInfo);
System.out.println("==========");
List<SourceObject.SourceDetailInfo> sourceDetailInfoList = new ArrayList<>();
sourceDetailInfoList.add(SourceObject.SourceDetailInfo.builder()
.sourceDetail("sourceDetail1")
.build());
sourceDetailInfoList.add(SourceObject.SourceDetailInfo.builder()
.sourceDetail("sourceDetail2")
.build());
sourceObject = SourceObject.builder()
.sourceName("sourceName")
.sourceAddrInfo(sourceAddrInfo)
.sourceDetailInfoList(sourceDetailInfoList)
.build();
sourceObject.setSourceAddrInfo(sourceAddrInfo);
targetObject = INSTANCE.converterObjectMappings(sourceObject);
System.out.println("----------验证整个对象---------");
System.out.println(sourceObject);
System.out.println(targetObject);