ModelMapper: сопоставить список объектов (со связанной строкой) с другим списком объектов

Я искал решение по всему интернету, но не смог найти работающего для меня.

Я хочу отобразить следующий класс

Класс Cartype:

    @JsonInclude (JsonInclude.Include.NON_NULL)
    @JsonPropertyOrder ({
            "Делать",
            "Модель"
    })
    открытый класс CarType {

        @JsonProperty("Make")
        частная строка делает;
        @JsonProperty("Модель")
        частная модель String;
        @JsonProperty("VIN")
        частная строка вин;
    (... получатель / установщик...)

... чтобы...

    @ApiModel (description = "FleetContractDto")
    @JsonInclude (JsonInclude.Include.NON_NULL)
    открытый класс FleetContractDto реализует Serializable {
        (... другие атрибуты...)
        @ApiModelProperty(value = "Тип автомобиля (сгенерированный)",
                пример = "BMW i3")
        private String carType = null;
        (... получатель / установщик...)

Контейнер для класса CarType:

    @JsonInclude (JsonInclude.Include.NON_NULL)
    @JsonPropertyOrder ({
            "Граф",
            "Результаты"
    })
    открытый класс CarTypeContainer {

        @JsonProperty("Count")
        частное целое число;
        @JsonProperty("Итоги")
        приватный список результатов = ноль;

    (... получатель / установщик...)

Контейнер для FleetContractDto:

    @ApiModel (description = "FleetContainer")
    открытый класс FleetContainer реализует Serializable {
        @SerializedName("данные")
        закрытый список данных = новый ArrayList();
    (... получатель / установщик...)

Я пробовал много решений, таких как TypeToken

    Список fleetContracts = mappingRepo.getModelMapper(). Map(carTypes.getResults(), new TypeToken>() {}.getType());

но проблема в том, что у меня есть уже существующий список с объектами (и значениями там), и я не хочу иметь новый.

Итак, я написал два класса отображения для ModelMapper:

Контейнер в контейнер:

    открытый класс CarTypeContainerToFleetContainer extends PropertyMap {частный статический конечный конвертер, List> carTypeConverter = ctx -> {
            return ctx.getSource().stream().map(carType -> {
                MappingContext subContext = ctx.create(carType, FleetconttoD);
                return ctx.getMappingEngine().map(subContext);
            }).collect(Collectors.toList());
        };

        @Override
        protected void configure() {
            using(carTypeConverter).map(source.getResults()). SetData (null); }
    }

CarType to FleetContractDto:

    открытый класс CarTypeToFleetContractDto extends PropertyMap {

        приватный статический финальный конвертер carTypeConverter = ctx -> {
            return ctx.getSource().getMake() + " " + ctx.getSource().getModel();
        };

        @Override
        защищенный void configure () {
            используя (carTypeConverter).map () setCarType (нуль).
        }
    }

Там же добавлены и будут найдены Spring:

this.modelMapper.addMappings (new CarTypeContainerToFleetContainer ());
this.modelMapper.addMappings (new CarTypeToFleetContractDto ());

Проблема в том, что если я пытаюсь вызвать CarTypeToFleetContractDto-Mapper из CarTypeContainerToFleetContainer-Mapper, я получу следующую ошибку:

Ошибки отображения ModelMapper:\r\n\r\n1) Converter (...). Dto.mapper.fleet.CarTypeToFleetContractDto$$Lambda$44/1246567323@43de4d77 не удалось преобразовать java.lang.Object в java.lang.String.\r\n Причиняется: java.lang.NullPointerException\r\n\tat (...).dto.mapper.fleet.CarTypeToFleetContractDto.lambda$static$0(CarTypeToFleetContractDto.java:11)\r\n\tat org.modelmapper.internal.MappingEngineImpl.convert(MappingEngineImpl.java:302)\r\n\tat org.modelmapper.internal.MappingEngineImpl.setDestinationValue(MappingEngineImpl.java:239)\r\n\tat org. propertyMap(MappingEngineImpl.java:187)\r\n\tat org.modelmapper.internal.MappingEngineImpl.typeMap(MappingEngineImpl.java:151)\r\n\tat org.modelmapper.internal.MappingEngineImpl.jj: Map (MappingEngineImpl.jpg: Mapping 105)

У меня больше нет идей, что я еще могу попробовать. Единственное, что я хочу сделать, это сопоставить значения из списка с CarTypes с уже существующим списком с FleetContractDtos.

Было бы очень хорошо, если бы кто-то мог мне помочь.

0 ответов

Другие вопросы по тегам