简体   繁体   English

Mapstruct 不支持泛型类型

[英]Mapstruct cannot support Generic type

I want to convert IPage from mybatis-plus to PageDto using mapstruct.我想使用 mapstruct 将 IPage 从 mybatis-plus 转换为 PageDto。

But mapstruct complains: Can't generate mapping method for a generic type variable source。但是mapstruct抱怨:Can't generate mapping method for a generic type variable source。

The code is as follows:代码如下:

@Mapper
public interface PageDtoMapper<T> {

    @Mapping(source = "total", target = "total")
    @Mapping(source = "pages", target = "pages")
    @Mapping(source = "records", target = "records")
    @Mapping(source = "current", target = "pageNum")
    @Mapping(source = "size", target = "pageSize")
    PageDto<T> toPageDto(IPage<T> page);
}

or:或者:

@Mapper
public interface PageDtoMapper {

    @Mapping(source = "total", target = "total")
    @Mapping(source = "pages", target = "pages")
    @Mapping(source = "records", target = "records")
    @Mapping(source = "current", target = "pageNum")
    @Mapping(source = "size", target = "pageSize")
    <T> PageDto<T> toPageDto(IPage<T> page);
}

PageDTO:页面DTO:

public class PageDto<T extends Serializable> {
    private Long total;
    private Long pages;
    private Long pageNum;
    private Long pageSize;
    private List<T> records;
}

IPage 网页

Can I use generic type in Mapstruct?我可以在 Mapstruct 中使用泛型类型吗?

Mapstruct generates type-safe code. Mapstruct 生成类型安全的代码。 I think it cannot be achieved if there is a type parameter left in the mapper interface.我认为如果mapper接口中留有类型参数是无法实现的。

Even if it forces you to define as many mapping methods as record types you use, this should work :即使它强制您定义与您使用的记录类型一样多的映射方法,这也应该有效:

@Mapper
public interface PageDtoMapper {

    @Mapping(source = "total", target = "total")
    @Mapping(source = "pages", target = "pages")
    @Mapping(source = "records", target = "records")
    @Mapping(source = "current", target = "pageNum")
    @Mapping(source = "size", target = "pageSize")
    PageDto<RecordType> toPageDto(IPage<RecordType> page);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM