2017-09-12 174 views
-1

沒有爲返回類型org.springframework.data.domain.Page註冊實現類型。Mapstruct返回類型

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

有人可以幫助我PLZ?

回答

0

這是MapStruct中的一個已知問題。看看mapstruct#607

這是一個解決方法(我認爲是由於一個bug)。該檢查僅在第一個源參數和結果類型之間完成。不過,您將需要一個包裝類型,以便能夠使用@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); 

} 

支票將整數和包裝之間完成,它就會被允許。爲了不暴露假人,你可以做這樣的事情:

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的工作,它不是一個功能。關注相關問題,以瞭解官方支持何時到來。