【问题标题】:@Value - lombok and mapstruct to another @value object@Value - lombok 和 mapstruct 到另一个 @value 对象
【发布时间】:2020-07-03 06:29:34
【问题描述】:

当我将 JSON Lombok @Value DTO 映射到 JPA @Value 实体类(反之亦然)时,编译会引发异常。

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

正在使用 Java 11、hibernate、spring boot 5、Lombok 和 map struct 1.3.1。

【问题讨论】:

标签: java lombok mapstruct


【解决方案1】:

使用的 MapStruct 版本需要一个无参数/无参数构造函数 (c.f https://github.com/mapstruct/mapstruct/issues/73)。

您需要使用 MapStruct 版本 1.4.0.Beta1;或者创建一个无参数的构造函数并且不要使用@Value。

【讨论】:

  • 你的意思是这是一个已知的限制吗?不是吗?任何解决方法。看起来他们将添加 1.4。那里只有测试版。现在让我来吧。
  • @bobs_007 为了清楚起见,我编辑了答案。是的,这是 1.4.0.Beta1 之前 mapstruct 的限制。你可以试试这个版本。否则,您将需要更改您的 DTO 类或不要将 mapstruct 与它们一起使用。
【解决方案2】:

在 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

【讨论】:

    猜你喜欢
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2021-10-11
    • 1970-01-01
    • 2020-08-11
    • 2021-03-10
    • 1970-01-01
    相关资源
    最近更新 更多