Mapstruct将子类和父类都映射为源

时间:2018-09-04 08:32:56

标签: java mapstruct

当前正在编写一些拦截器,将某些请求模型转换为另一个模型。我为所有不同类型的请求提供了映射,但是由于它处于拦截器级别,因此我为请求模型获得了一个Java对象。我为对象添加了一个映射,这样我就可以传递在拦截器中获得的对象,而不是将其强制转换为我具有映射关系的一种类型,但是,它不起作用,它没有映射任何字段。足够有趣的是,当我弄乱了映射的定义顺序时,它确实起作用了,但是并不一致,所以我不确定如何使它起作用。

public ArrayList<Student> SortOnCGPA(ArrayList<Student> stu){        
        Student sorStu[] =new Student[stu.size()];
        Iterator it = stu.iterator();
        int i = 0;
        while(it.hasNext()){
            sorStu[i] = new Student((Student)it.next());
            i++;
        }
        Arrays.sort(sorStu, new StuDescend());
        stu = new ArrayList(Arrays.asList(sorStu));
        return stu;
    }

1 个答案:

答案 0 :(得分: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;
    }

}