Spring Boot Mapstruct返回类型

mgdq6dx1  于 2024-01-06  发布在  Spring
关注(0)|答案(2)|浏览(252)

没有为返回类型org.springframework.data.domain.Page注册实现类型。

  1. @Mapper(componentModel = "spring", uses = { OptionalMapper.class, VehicleImageMapper.class, GearShiftMapper.class,
  2. FuelMapper.class, ColorMapper.class, ModelMapper.class, UserMapper.class })
  3. public interface VehicleMapper {
  4. VehicleMapper INSTANCE = Mappers.getMapper(VehicleMapper.class);
  5. VehicleDTO vehicletoVehicleDTO(Vehicle vehicle);
  6. Page<VehicleDTO> vehicletoVehicleDTO(Page<Vehicle> vehicles);
  7. Iterable<VehicleDTO> vehicletoVehicleDTO(Iterable<Vehicle> vehicles);
  8. Vehicle vehicleDTOtoVehicle(VehicleDTO vehicleDTO);
  9. }

字符串
我的服务...

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


有人能帮帮我吗?

dw1jzc5e

dw1jzc5e1#

这是MapStruct中的一个已知问题。看看mapstruct#607
对此有一个解决方案(我认为是由于bug)。检查仅在第一个源参数和结果类型之间进行。但是您需要一个 Package 器类型,以便能够使用@Mapping和多个参数。这意味着以下内容将工作:😄

  1. public class Wrapper<T> {
  2. private T value;
  3. //getters and setters
  4. }
  5. public interface MyMapper {
  6. @Mapping(source = "customers", target = "value")
  7. Wrapper<PageDTO<VehicleDTO>> map(Integer dummy, Page<Vehicle> vehicles);
  8. }

字符串
检查将在Reflector和Wrapper之间进行,并且它将被允许。为了不暴露虚拟对象,您可以执行以下操作:

  1. public abstract class MyMapper {
  2. public PageDTO<VehicleDTO> map(Page<Vehicle> vehicles) {
  3. return map(1, vehicles).getValue(); //Maybe do null checks as well
  4. }
  5. @Mapping(source = "customers", target = "value")
  6. protected Wrapper<PageDTO<VehicleDTO>> map(Integer dummy, Page<Vehicle> vehicles);
  7. }


同样,这是一个解决方案,使MapStruct工作,它不是一个功能。按照链接的问题,以了解官方支持何时会来。

展开查看全部
ujv3wf0j

ujv3wf0j2#

  1. @Mapper
  2. public interface VehicleMapper {
  3. VehicleDTO map(Vehicle data);
  4. default Page<VehicleDTO> map(Page<Vehicle> data) {
  5. return data.map(this::map);
  6. }
  7. }

字符串
像这样的?

相关问题