Mapstruct Mapping как дочерний класс, так и родительский как источник - PullRequest
0 голосов
/ 04 сентября 2018

В настоящее время пишем некоторый перехватчик, который объединяет некоторые модели запросов в другую модель. У меня есть сопоставления для всех моих различных типов запросов, однако, так как это на уровне перехватчика, я получаю Java-объект для модели запроса. Я добавил отображение для объекта, чтобы я мог просто передать объект, который я получаю в перехватчике, а не приводить его к одному из типов, для которых у меня есть отображение, однако он не работает, он не отображает никакое поле , Интересно, что почему-то, когда я возился с порядком определения моих отображений, это работало, но это не согласовывалось, поэтому я не уверен, как я заставил его работать.

   @Mappings({
    @Mapping(source = "myField", target = "myOtherField")
})
NiceModel toLoggableEntity(RequestModel1 request);

  @Mappings({
    @Mapping(source = "myField2", target = "myOtherField")
})
NiceModel toLoggableEntity(RequestModel2 request);

//so that I can pass Object from the interceptor without having 
//to figure out which request model to cast it to  
NiceModel toLoggableEntity(Object request);

1 Ответ

0 голосов
/ 04 сентября 2018

Я думаю, что это невозможно

но вы можете сделать свою реализацию в своем классе отображения

public abstract class MyMapper {
    @Mappings({
            @Mapping(source = "myField", target = "myOtherField")
    })
    abstract NiceModel toLoggableEntity(RequestModel1 request);

    @Mappings({
            @Mapping(source = "myField2", target = "myOtherField")
    })
    abstract NiceModel toLoggableEntity(RequestModel2 request);

    NiceModel toLoggableEntity(Object request) {
        if (request instanceof RequestModel1) {
            return toLoggableEntity((RequestModel1) request);
        }
        if (request instanceof RequestModel2) {
            return toLoggableEntity((RequestModel2) request);
        }
        //manage this case
        return null;
    }

}
...