2017-09-12 1 views
-1

Aucun type d'implémentation n'est enregistré pour le type de retour org.springframework.data.domain.Page.Type de retour 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); 
} 

Mon service ...

@Override 
public Page<VehicleDTO> searchVehiclesByPage(Pageable page) { 
    Page<VehicleDTO> vehicles = vehicleMapper.vehicletoPageVehicleDTO(vehicleRepository.findAllByEnabled(page)); 
    return vehicles; 
} 

quelqu'un peut me aider plz?

Répondre

0

Ceci est un problème connu dans MapStruct. Jetez un oeil à mapstruct#607.

Il existe une solution de contournement pour cela (je pense en raison d'un bug). La vérification est uniquement effectuée entre le premier paramètre source et le type de résultat. Vous aurez besoin d'un type de wrapper, afin de pouvoir utiliser @Mapping et plusieurs paramètres. Ce qui signifie que les éléments suivants fonctionnera:

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); 

} 

Le contrôle sera effectué entre Integer et Wrapper et il sera permis. Afin de ne pas exposer le mannequin que vous pouvez faire quelque chose comme:

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); 

} 

Encore une fois ceci est une solution pour rendre le travail de MapStruct et ce n'est pas une caractéristique. Suivez le problème lié afin de savoir quand le support officiel viendra.