Как избежать копирования null
значений из источника в места назначения с использованием ModelMapper
Я пробовал приведенный ниже код, но он всегда переопределяется в месте назначенияс null
значением
public class EntityMapperTest {
public static void main(String[] args) {
TripDto tripDto = new TripDto();
tripDto.setDriverID("123");
tripDto.setRegNo("12345");
//tripDto.setTripStatus("completed");
Trip trip = new Trip();
trip.setTripID("ids");
trip.setTripStatus("active");
EntityMapperTest entityMapper = new EntityMapperTest();
Trip newTrip = (Trip) entityMapper.convertToEntitySkipNull(tripDto,trip);
System.out.println("status "+newTrip.getTripStatus());
System.out.println("trip ID "+newTrip.getTripID());
System.out.println(newTrip.getDriverID());
System.out.println(newTrip.getRegNo());
System.out.println("********TRIP******");
System.out.println(trip.getTripID());
System.out.println(trip.getTripStatus());
System.out.println(trip.getDriverID());
System.out.println(trip.getRegNo());
}
public Object convertToEntitySkipNull( TripDto src,Trip dest) {
ModelMapper mapperObj=new ModelMapper();
mapperObj.typeMap(src.getClass(),dest.getClass()).setPropertyCondition(Conditions.isNotNull());
mapperObj.getConfiguration().setSkipNullEnabled(true).setAmbiguityIgnored(true);
return mapperObj.map(src,dest.getClass());
}
}
выводом:
status null // this should have been active, but null is copied
trip ID null // this should have been ids, but null is copied
123
12345
********TRIP******
ids
active
null
null
Я что-то упустил?Кроме того, я попробовал и ниже, но не повезло.
public Object convertToEntitySkipNull( TripDto src,Trip dest) {
ModelMapper mapperObj=new ModelMapper();
mapperObj.typeMap(src.getClass(),dest.getClass()).setPropertyCondition(Conditions.isNotNull());
mapperObj.typeMap(src.getClass(),dest.getClass()).addMappings(mapping -> mapping.when(context -> {
System.out.println(context.getSource());
if(context.getSource() != null){
return true;
}
return false;
}
).map(TripDto::getTripStatus,(destination, value) -> destination.setTripStatus((String) value)));
mapperObj.getConfiguration().setSkipNullEnabled(true).setAmbiguityIgnored(true);
return mapperObj.map(src,dest.getClass());
}
Maven:
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.2</version>
</dependency>