如何使用自定义映射器映射字段并在MapperFacade或MapperFactory中保存字段名称映射?

时间:2019-06-22 11:04:45

标签: java mapping orika

有两个类。其中之一具有FunctionalInterface类型的字段。我需要将nameA的字段ClassA映射到base的{​​{1}}。我可以使用自定义映射器来实现它,但是随后在MapperFacade中将没有字段名称映射(例如,fieldsMapping集合中的“ nameA” <->“ base”),但是在其他方法中需要进一步的数学运算。如果我使用字段名称映射它们,则会得到一个异常,即java无法将String映射到CustomFunctionalInterface。 是否有解决方法(将ClassB映射到nameA并在MapperFacade或MapperFactory中映射字段名称)?

base
package project.my;

public class ClassA {
    String nameA;

    public String getNameA() {
        return nameA;
    }

    public void setNameA(String nameA) {
        this.nameA = nameA;
    }
}
package project.my;

public class ClassB {
    CustomFunctionalInterface base;

    public CustomFunctionalInterface getBase() {
        return base;
    }

    public void setBase(CustomFunctionalInterface base) {
        this.base = base;
    }
}

1 个答案:

答案 0 :(得分:1)

我已经在orika文档中搜索了分辨率,但是没有找到与此问题相关的任何内容。我认为没有解决此问题的好方法。使用customMappers时,您无法使用所需的字段关系填充fieldsMapping。与转换器相似(在这种情况下)。我的解决方法:

...
   .fieldMap("nameA", "base").bToA().exclude().add()
...

当您排除映射关系时,将在fieldsMapping中编写关系(但使用“ <-”关系而不是“ <->”)。就我而言,这种排除没有任何意义,但是在fieldMappind(或classMapping)中将存在关系