ModelMapper не отображается

Когда я пытаюсь сопоставить строку в источнике с целым числом в пункте назначения через Enum. Модельмаппер не работает.

Источник

public class Request {
    private String classification;
}

Пункт назначения

public class DTO {
    private Integer classification;
}

Сопоставление между строкой и целым числом определено в ENUM.

public enum Classification {

POWER(3, "Power"),
PERFORMANCE(4, "Performance"),
TASK(13, "Task");

private final Integer code;
private final String  name;

ProblemClassification(final int code, final String name) {
    this.code = code;
    this.name = name;
}

public Integer getCode() {
    return code;
}

public String getName() {
    return name;
}

public static Integer getCodeByName(String name) {
    Optional<Classification> classification = Arrays.asList(Classification.values()).stream()
            .filter(item -> item.getName().equalsIgnoreCase(name))
            .findFirst();
    return classification.isPresent() ? classification.get().getCode() : null;
}
}

person Jags    schedule 12.12.2018    source источник


Ответы (1)


Вам нужно Converter там:

ModelMapper modelMapper = new ModelMapper();
Converter<String, Integer> classificationConverter =
                ctx -> ctx.getSource() == null ? null : Classification.getCodeByName(ctx.getSource());
modelMapper.typeMap(Request.class, DTO.class)
                .addMappings(mapper -> mapper.using(classificationConverter).map(Request::getClassification, DTO::setClassification));
person Andrew Nepogoda    schedule 13.12.2018
comment
Спасибо, я написал этот конвертер, и он работает, но проблема в том, что есть два одинаковых поля. Второе поле — «Приоритет» и «Если я сопоставляю приоритет с другим перечислением». это также использует тот же преобразователь, и сопоставление не происходит должным образом. - person Jags; 17.12.2018
comment
@Jags, определите новое Converter для перечисления Priority. - person Andrew Nepogoda; 18.12.2018
comment
Спасибо, по какой-то причине это не сработало, как ожидалось, но да, теперь это работает. Только что загрузил этот простой проект в git, так что это может помочь другим. github.com/hsjagadeesh/LearningModelMapper - person Jags; 19.12.2018