Shi*_*bop 3 java builder lombok mapstruct
我有两个这样的域类。
@Getter
@Setter
public class User {
private String name;
}
Run Code Online (Sandbox Code Playgroud)
@Getter
@Setter
public class Student extends User {
private int grade;
}
Run Code Online (Sandbox Code Playgroud)
我还有两个这样的 Dto 课程。
@Getter
@SuperBuilder
public class UserDto {
private final String name;
}
Run Code Online (Sandbox Code Playgroud)
@Getter
@SuperBuilder
public class StudentDto extends UserDto {
private final int grade;
}
Run Code Online (Sandbox Code Playgroud)
所以我创建了一个扩展 GenericMapper 的映射器类 StudentMapper。
public interface GenericMapper<D, E> {
D toDto(E e);
E toEntity(D d);
}
Run Code Online (Sandbox Code Playgroud)
@Mapper(componentModel = "spring")
public interface StudentMapper extends GenericMapper<StudentDto, Student> {
}
Run Code Online (Sandbox Code Playgroud)
但是我在编译Mapper时出错了。
“StudentDto 没有可访问的构造函数。”
这些代码有什么问题吗?
我希望 StudentDto 不可修改。使用 lombok 和 mapstruct 到达那里的最佳方式是什么?
您可以从这里获取源代码。 https://github.com/jangdaewon/sandbox.lombokmapstruct
这有点违反直觉,但 Lombok 必须放在注释处理器列表中的 mapstruct之后。Mapstruct 检测 Lombok 并等待 Lombok 完全完成其工作(Lombok 可能需要几轮注释处理)。
因此,只需更改处理器的顺序,如下<configuration>所示:maven-compiler-pluginpom.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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2132 次 |
| 最近记录: |