gpt4 book ai didi

java - Mapstruct 似乎无法识别 Lombok 的 @SuperBuilder

转载 作者:行者123 更新时间:2023-12-02 02:04:36 42 4
gpt4 key购买 nike

我有两个像这样的域类。

@Getter
@Setter
public class User {
private String name;
}
@Getter
@Setter
public class Student extends User {
private int grade;
}

我还有两个像这样的 Dto 类。

@Getter
@SuperBuilder
public class UserDto {
private final String name;
}
@Getter
@SuperBuilder
public class StudentDto extends UserDto {
private final int grade;
}

所以我创建了一个映射器类 StudentMapper,它扩展了 GenericMapper。

public interface GenericMapper<D, E> {
D toDto(E e);
E toEntity(D d);
}
@Mapper(componentModel = "spring")
public interface StudentMapper extends GenericMapper<StudentDto, Student> {
}

但是我在编译Mapper的时候遇到了一个错误。

“StudentDto 没有可访问的构造函数。”

这些代码有什么问题?

我希望 StudentDto 不可修改。使用 lombok 和 mapstruct 实现目标的最佳方式是什么?

您可以从这里获取源代码。 https://github.com/jangdaewon/sandbox.lombokmapstruct

最佳答案

这有点违反直觉,但在注释处理器列表中,Lombok 必须放在之后 mapstruct。 Mapstruct 检测 Lombok 并等待 Lombok 完成其工作(Lombok 可能需要几轮注释处理)。

因此,只需更改 <configuration> 中处理器的顺序即可的 maven-compiler-plugin在你的pom.xml像这样:

<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-mapstruct-binding</artifactId>
<version>${lombok-mapstruct-binding.version}</version>
</path>
</annotationProcessorPaths>

关于java - Mapstruct 似乎无法识别 Lombok 的 @SuperBuilder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68607342/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com