具有mapStruct的内部不可变类



我们将Immutables与MapStruct一起使用,在将实体转换为dto时遇到了问题。

@Value.Immutable
public interface ProjectDto {
String getId();
String getName();
//ProjectStatisticsDto getStatistics();
}
@Value.Immutable
public interface ProjectStatisticsDto {
Long getCount();
}
@Immutable
public interface Project extends Serializable {
@JsonProperty("_id")
String getId();
String getName();
//ProjectStatistics getStatistics();
}
@Immutable
public interface ProjectStatistics extends Serializable {
Long getCount();
}

映射器类

@Mapper
public interface ProjectMapper {
ProjectMapper INSTANCE = Mappers.getMapper(ProjectMapper.class);
ImmProjectDto toDto(ImmProject project); // This works only when the inner model of project statistics is commented.
//ProjectDto toDto(Project project); THIS DOES NOT WORK (Error 1)
// ImmProjectDto toDto(ImmProject project); After I uncomment the inner class of project statistics then even this does not work (Error 2)

在错误的情况下,问题与完全相同

Error 1: No implementation was created for ProjectMapper due to having a problem in the erroneous element com.xyz.ProjectDto. 
Error 2: No implementation was created for ProjectMapper due to having a problem in the erroneous element com.xyz.ProjectStatisticsDto. 

我用免疫表检查了mapstruct的测试,没有什么不同https://github.com/mapstruct/mapstruct/blob/master/integrationtest/src/test/resources/immutablesBuilderTest/mapper/src/main/java/org/mapstruct/itest/immutables/Person.java.

我尝试删除序列化语句,但没有成功。我添加了一些详细的语句,其中说

Note: MapStruct: Immutables found on classpath
Note: MapStruct: Using accessor naming strategy: org.mapstruct.ap.spi.ImmutablesAccessorNamingStrategy
Note: MapStruct: Using builder provider: org.mapstruct.ap.spi.ImmutablesBuilderProvider
Note: MapStruct: Using enum naming strategy: org.mapstruct.ap.spi.DefaultEnumMappingStrategy

这看起来绝对正确

查看问题的标题"具有mapStruct"的内部不可变类;我猜您的不可变类在另一个类中。

对于已经有PR的MapStruct(请参阅MapStruct/MapStruct#2198(来说,这是一个已知的问题,它将在下一个非补丁版本中修复。

与此同时,你必须让你的Immutable类成为顶级类。

相关内容

  • 没有找到相关文章

最新更新