Mapstruct似乎不认识龙目岛的@SuperBuilder



我有两个这样的域类。

@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>

最新更新