Как избежать копирования нулевых значений из источника в место назначения, используя ModelMapper - PullRequest
0 голосов
/ 11 апреля 2019

Как избежать копирования 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>
...