没有为返回类型org.springframework.data.domain.Page注册实现类型。
@Mapper(componentModel = "spring", uses = { OptionalMapper.class, VehicleImageMapper.class, GearShiftMapper.class,
FuelMapper.class, ColorMapper.class, ModelMapper.class, UserMapper.class })
public interface VehicleMapper {
VehicleMapper INSTANCE = Mappers.getMapper(VehicleMapper.class);
VehicleDTO vehicletoVehicleDTO(Vehicle vehicle);
Page<VehicleDTO> vehicletoVehicleDTO(Page<Vehicle> vehicles);
Iterable<VehicleDTO> vehicletoVehicleDTO(Iterable<Vehicle> vehicles);
Vehicle vehicleDTOtoVehicle(VehicleDTO vehicleDTO);
}
我的服务...
@Override
public Page<VehicleDTO> searchVehiclesByPage(Pageable page) {
Page<VehicleDTO> vehicles = vehicleMapper.vehicletoPageVehicleDTO(vehicleRepository.findAllByEnabled(page));
return vehicles;
}
有人可以帮助我吗?
这是 MapStruct 中的一个已知问题。看看 mapstruct#607。
有一个解决方法(我认为是由于错误😄)。仅在第一个源参数和结果类型之间进行检查。不过,您将需要一个包装类型,以便能够使用
@Mapping
和多个参数。这意味着以下内容将起作用:
public class Wrapper<T> {
private T value;
//getters and setters
}
public interface MyMapper {
@Mapping(source = "customers", target = "value")
Wrapper<PageDTO<VehicleDTO>> map(Integer dummy, Page<Vehicle> vehicles);
}
将在 Integer 和 Wrapper 之间进行检查并允许。为了不暴露假人,你可以这样做:
public abstract class MyMapper {
public PageDTO<VehicleDTO> map(Page<Vehicle> vehicles) {
return map(1, vehicles).getValue(); //Maybe do null checks as well
}
@Mapping(source = "customers", target = "value")
protected Wrapper<PageDTO<VehicleDTO>> map(Integer dummy, Page<Vehicle> vehicles);
}
这又是一个让 MapStruct 工作的解决方法,它不是一个功能。请关注链接的问题以了解官方支持何时到来。
@Mapper
public interface VehicleMapper {
VehicleDTO map(Vehicle data);
default Page<VehicleDTO> map(Page<Vehicle> data) {
return data.map(this::map);
}
}
也许是这样的?