Reputation: 95
I want to convert IPage from mybatis-plus to PageDto using mapstruct.
But mapstruct complains: 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:
public class PageDto<T extends Serializable> {
private Long total;
private Long pages;
private Long pageNum;
private Long pageSize;
private List<T> records;
}
Can I use generic type in Mapstruct?
Upvotes: 1
Views: 5183
Reputation: 550
Mapstruct generates type-safe code. I think it cannot be achieved if there is a type parameter left in the mapper interface.
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);
}
Upvotes: 1