Spring Boot 配置 MapStruct + Lombok 踩坑记录
Spring Boot 集成 Mapstruct
Mapstruct 版本 1.5.5.Final , lombok版本 1.18.20。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<annotationProcessorPaths>
<!-- 1.Lombok 1.18.12 版本以下: annotationProcessorPaths中mapstruct、projectlombok顺序不受影响。-->
<!-- 2.Lombok 1.18.16 版本以上: annotationProcessorPaths中mapstruct、lombok顺序受影响,mapstruct应该遵循lombok路径-->
<!-- 3.Lombok 1.18.16 版本以上: lombok-mapstruct-binding非必须配置项。-->
<!-- 引入 mapstruct-processor -->
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<!-- 引入 mapstruct-processor -->
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
注意事项
- Lombok 1.18.12 版本以下: annotationProcessorPaths中mapstruct、projectlombok顺序不受影响;
- Lombok 1.18.16 版本以上: annotationProcessorPaths中mapstruct、lombok顺序受影响,mapstruct应该遵循lombok路径;
- Lombok 1.18.16 版本以上: lombok-mapstruct-binding非必须配置项 ;
java: No property named “L_DATE” exists in source parameter(s). Did you mean “l_DATE”?
使用lombok后,如果有这种首字母大写后跟下划线的属性名,需注意set方法的转换
private String L_NAME;
private String L_DATE;
private String L_TIME;
public void setL_NAME(String l_NAME) {
L_NAME = l_NAME;
}
public void setL_DATE(String l_DATE) {
L_DATE = l_DATE;
}
public void setL_TIME(String l_TIME) {
L_TIME = l_TIME;
}
mapper的source应与set
@Mapping(source = "l_NAME", target = "l_name"),
@Mapping(source = "l_DATE", target = "l_date"),