Почему Map Struct иногда генерирует неправильный Mapper, и как я могу ее исправить?JAVA

Программисты JAVA общаются здесь
Anonymous
Почему Map Struct иногда генерирует неправильный Mapper, и как я могу ее исправить?

Сообщение Anonymous »

Я использую Java 8, Spring Boot 2.3.4. РЕЛИЗА ВЕРСИЯ, MAVEN в качестве инструмента сборки и IntelliJ в качестве моего IDE. Class = "Lang-Java PrettyPrint-Override">@Mapper(componentModel = "spring", nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
public interface MapStructVehicleMapper {
Vehicle toVehicle(VehicleMasterDto dto);
void updateVehicleFromDto(@MappingTarget Vehicle vehicle, VehicleDetailDto vehicleDetailDto);
}
< /code>
Приведено ниже зависимости, которые я использовал.

org.mapstruct
mapstruct
1.5.5.Final




org.mapstruct
mapstruct-processor
1.5.5.Final
provided


org.apache.maven.plugins
maven-compiler-plugin
3.11.0

${java.version}
${java.version}



org.mapstruct
mapstruct-processor
1.5.5.Final



org.projectlombok
lombok
1.18.30




< /code>
Проблема, с которой я сталкиваюсь, заключается в том, что когда IMP Mapstruct генерирует во время компиляции, иногда она генерирует правильную реализацию, но иногда это не так.@Generated(

value = "org.mapstruct.ap.MappingProcessor",
date = "2025-08-25T19:01:41+0530",
comments =
"version: 1.5.5.Final, compiler: javac, environment: Java 1.8.0_462 "
"(Private Build)"
)

@Component

public class MapStructVehicleMapperImpl implements MapStructVehicleMapper {
@Override
public Vehicle toVehicle(VehicleMasterDto dto) {
if (dto == null) {
return null;
}

Vehicle vehicle = new Vehicle();
vehicle.setVehicleNo(dto.getVehicleNo());
vehicle.setDriverMobileNo(dto.getDriverMobileNo());
vehicle.setDriverEmail(dto.getDriverEmail());
vehicle.setMaxWeight(dto.getMaxWeight());
vehicle.setMaxCapacity(dto.getMaxCapacity());
vehicle.setVehicleType(dto.getVehicleType());
vehicle.setSupplierId(dto.getSupplierId());
vehicle.setWarehouseId(dto.getWarehouseId());
vehicle.setVehicleLength(dto.getVehicleLength());
vehicle.setVehicleWidth(dto.getVehicleWidth());
vehicle.setVehicleHeight(dto.getVehicleHeight());
vehicle.setBaseWarehouseId(dto.getBaseWarehouseId());
vehicle.setVehicleStatus(dto.getVehicleStatus());
vehicle.setIsUnavailableForOptimization(dto.getIsUnavailableForOptimization());
vehicle.setAllocatedForOfflineOptimization(dto.getAllocatedForOfflineOptimization());
vehicle.setIsActive(dto.getIsActive());

return vehicle;
}

@Override
public void updateVehicleFromDto(Vehicle vehicle, VehicleDetailDto vehicleDetailDto) {
if (vehicleDetailDto == null) {
return;
}

if (vehicleDetailDto.getDriverMobileNo() != null) {
vehicle.setDriverMobileNo(vehicleDetailDto.getDriverMobileNo());
}

if (vehicleDetailDto.getDriverEmail() != null) {
vehicle.setDriverEmail(vehicleDetailDto.getDriverEmail());
}

if (vehicleDetailDto.getMaxWeight() != null) {
vehicle.setMaxWeight(vehicleDetailDto.getMaxWeight());
}

vehicle.setMaxCapacity(vehicleDetailDto.getMaxCapacity());

if (vehicleDetailDto.getVehicleType() != null) {
vehicle.setVehicleType(vehicleDetailDto.getVehicleType());
}

vehicle.setSupplierId(vehicleDetailDto.getSupplierId());

if (vehicleDetailDto.getCompanyId() != null) {
vehicle.setCompanyId(vehicleDetailDto.getCompanyId());
}

if (vehicleDetailDto.getWarehouseId() != null) {
vehicle.setWarehouseId(vehicleDetailDto.getWarehouseId());
}

vehicle.setFleetId(vehicleDetailDto.getFleetId());

if (vehicleDetailDto.getVehicleLength() != null) {
vehicle.setVehicleLength(vehicleDetailDto.getVehicleLength());
}

if (vehicleDetailDto.getVehicleWidth() != null) {
vehicle.setVehicleWidth(vehicleDetailDto.getVehicleWidth());
}

if (vehicleDetailDto.getVehicleHeight() != null) {
vehicle.setVehicleHeight(vehicleDetailDto.getVehicleHeight());
}

if (vehicleDetailDto.getBaseWarehouseId() != null) {
vehicle.setBaseWarehouseId(vehicleDetailDto.getBaseWarehouseId());
}

if (vehicleDetailDto.getVehicleStatus() != null) {
vehicle.setVehicleStatus(vehicleDetailDto.getVehicleStatus());
}

if (vehicleDetailDto.getIsUnavailableForOptimization() != null) {
vehicle.setIsUnavailableForOptimization(
vehicleDetailDto.getIsUnavailableForOptimization());
}

if (vehicleDetailDto.getAllocatedForOfflineOptimization() != null) {
vehicle.setAllocatedForOfflineOptimization(
vehicleDetailDto.getAllocatedForOfflineOptimization());
}

if (vehicleDetailDto.getIsActive() != null) {
vehicle.setIsActive(vehicleDetailDto.getIsActive());
}
}
}
< /code>
Иногда он генерирует следующий карт, который неверный: < /p>
@Generated(

value = "org.mapstruct.ap.MappingProcessor",

date = "2025-08-26T09:43:06+0530",

comments =
"version: 1.5.5.Final, compiler: javac, environment: Java 1.8.0_462 "
"(Private Build)"

)

@Component

public class VehicleMapperMapStructImpl implements VehicleMapperMapStruct {
@Override
public Vehicle toVehicle(VehicleMasterDto dto) {
if (dto == null) {
return null;
}

Vehicle vehicle = new Vehicle();

return vehicle;
}

@Override
public void updateVehicleFromDto(Vehicle vehicle, VehicleDetailDto vehicleDetailDto) {
if (vehicleDetailDto == null) {
return;
}
}
}
< /code>
Из -за этого случайного поведения я не могу доверять структуре карты в нашей производственной среде. Таким образом, мне пришлось создать ручную карту. Может ли кто -нибудь помочь мне понять основную проблему здесь?


Подробнее здесь: https://stackoverflow.com/questions/797 ... n-i-fix-it

Вернуться в «JAVA»