2017-09-12 4 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을보십시오.

해결 방법이 있습니다 (버그로 생각됨). 검사는 첫 번째 소스 매개 변수와 결과 유형 사이에서만 수행됩니다. @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를 작동시키기위한 임시 해결책이며 기능이 아닙니다. 공식적인 지원이 언제 올지 알기 위해 연결된 문제를 따르십시오.