当我将JSON Lombok @Value DTO映射到JPA @Value实体类时,反之亦然,编译抛出的异常。
“没有可访问的无参数构造函数”
正在使用Java 11,休眠,春季启动5,Lombok和映射结构1.3.1。
答案 0 :(得分:3)
使用的MapStruct版本需要无参数/无参数的构造函数(参见https://github.com/mapstruct/mapstruct/issues/73。
您需要使用MapStruct版本1.4.0.Beta1;或创建无参数的构造函数,并且不要使用@Value。
答案 1 :(得分:0)
修改Maven / Gradle文件中注释处理器路径的顺序可以解决此问题。只要确保Lombok应该在Mapstruct之后即可。
使用Gradle:
dependencies {
...
annotationProcessor("org.mapstruct:mapstruct-processor")
annotationProcessor("org.projectlombok:lombok") <<=== Lombok after mapstruct
...
}
使用Maven:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin-version}</version>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
<useIncrementalCompilation>false</useIncrementalCompilation>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct-version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId> <<=== Lombok after Mapstruct
<artifactId>lombok</artifactId>
<version>${lombok-version}</version>
</path>
</annotationProcessorPaths>
</configuration>
<plugin>
我会在您的课程之前添加以下Lombok注释:
@Value( staticConstructor = "of" )
@With
@Builder
此外,如果您希望Lombok为所有带有 @Value 注释的类添加一个无参数的构造函数,则要将以下内容添加到您的 lombok.config 文件:
lombok.noargsconstructor.extraprivate=true