пропустить нулевое значение modelmapper

Class A {
    private String a;
    private String b;
    private B innerObject;
}
Class B {
    private String c;
}

В моем случае String b может иметь нулевое значение. Моя конфигурация modelmapper выглядит следующим образом:

ModelMapper mapper = new ModelMapper();
    mapper.getConfiguration()
    .setFieldMatchingEnabled(true)
    .setMatchingStrategy(MatchingStrategies.LOOSE)
    .setFieldAccessLevel(AccessLevel.PRIVATE)
    .setSkipNullEnabled(true)
    .setSourceNamingConvention(NamingConventions.JAVABEANS_MUTATOR);

когда я сопоставляю объект, я получаю целевой объект со значением b=null.

Попытка избежать стратегии, показанной здесь: ТАК-вопрос

Что мне не хватает?


person AchuSai    schedule 14.12.2017    source источник
comment
.setSkipNullEnabled(true) достаточно, можете ли вы показать мне пример вашей карты?   -  person Mirek Kowieski    schedule 05.06.2019


Ответы (3)


Вы пробовали эту конфигурацию:

modelMapper.getConfiguration().setPropertyCondition(Conditions.isNotNull());
person TequilaLime    schedule 27.07.2018

Похоже, это невозможно.

public <D> D map(Object source, Class<D> destinationType) {
    Assert.notNull(source, "source");
    Assert.notNull(destinationType, "destinationType");
    return this.mapInternal(source, (Object)null, destinationType (String)null);
}

Я решил это с помощью следующей функции оболочки.

private static <D> D map(Object source, Type destination) {
    return source == null ? null : mapper.map(source, destination);
}

Проверьте также этот вопрос сопоставление, когда исходный объект имеет значение null?

person Dasha Buzovska    schedule 04.06.2020

Я бы предпочел таким образом:

@Configuration
public class ModelMapperConfig {

    @Bean
    public ModelMapper modelMapper() {
        ModelMapper modelMapper = new ModelMapper();
        modelMapper.getConfiguration().setSkipNullEnabled(true);

        return modelMapper;
    }
}
person Felipe Pereira    schedule 24.06.2020