Java Необязательный геттер не работает в modelmapper - PullRequest
2 голосов
/ 04 июля 2019

Невозможно преобразовать один класс dto в другой класс dto, используя ModelMapper.

N.B: Я не хочу использовать геттер / сеттер. Я хочу использовать Optional только геттер

Пример:

class A {      
    Long id;

    public Optional<Long> getId() {
       return Optional.ofNullable(id);
    }
}

Другой класс:

class B {
    Long id;
    // getter and setter
}

Преобразователь:

B f(A a) {
  new ModelMapper.map(a, B.class);
}

Ошибка: failed to convert java.util.Optional to java.lang.Long.\n\n1 error

Ответы [ 2 ]

1 голос
/ 04 июля 2019

Я думаю, что конвертер может вам помочь.

Converter<String, String> toUppercase = new AbstractConverter<String, String>() {
  protected String convert(String source) {
    return source == null ? null : source.toUppercase();
  }
};

Проверьте это здесь http://modelmapper.org/user-manual/converters/ вам просто нужно заменить одну строку на Optional, а вторую - Long

1 голос
/ 04 июля 2019

Полагаю, что маппер просто сканирует поля с помощью отражения, получателей сборки и ожидает тот же тип возвращаемого значения, что и тип поля.

Вот почему он не может разыграть Long до Optional<Long>.

В качестве обходного пути вы можете создать само поле Optional<Long>.

Или, что еще лучше, просто не возвращайте опционально в методах получения POJO.

...