@Value-龙目岛和mapstruct到另一个@value对象

时间:2020-07-03 06:29:34

标签: java lombok mapstruct

当我将JSON Lombok @Value DTO映射到JPA @Value实体类时,反之亦然,编译抛出的异常。

“没有可访问的无参数构造函数”

正在使用Java 11,休眠,春季启动5,Lombok和映射结构1.3.1。

2 个答案:

答案 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