Mapstruct将子类和父级映射为源

问题描述 投票:0回答:1

目前正在编写一些拦截器,将一些请求模型转换为另一个模型。我有所有不同类型的请求的映射,但因为它是在拦截器级别,我得到一个请求模型的java对象。我为Object添加了一个映射,这样我就可以传递拦截器中的Object,而不是将其转换为我有一个映射类型,但是,它不起作用,它不映射任何字段。有趣的是,不知怎的,当我弄乱我的映射定义的顺序时,它工作,但它不一致,所以我不知道我是如何让它工作的。

   @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);
java mapstruct
1个回答
2
投票

我认为这是不可能的

但您可以在映射类中进行实现

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;
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.