Как отобразить поля с помощью пользовательского сопоставления и сохранить сопоставление имен полей в MapperFacade или MapperFactory? - PullRequest
1 голос
/ 22 июня 2019

Есть два класса. У одного из них есть поле типа FunctionalInterface. Мне нужно сопоставить поле nameA с ClassA до base с ClassB. Я могу сделать это с помощью пользовательского сопоставления, но тогда у меня не будет сопоставления имен полей в MapperFacade (например, «nameA» <-> «base» в fieldsMapping Collection), но оно мне нужно для дальнейшего сопоставления в другом методе. Если я сопоставлю их с именами полей, я получу исключение, что Java не может сопоставить String с CustomFunctionalInterface. Есть ли способ разрешить это (отобразить nameA в base и сопоставить имена полей в MapperFacade или MapperFactory)?

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;
    }
}
package project.my;

@FunctionalInterface
public interface CustomFunctionalInterface {
    String name();
}

1 Ответ

1 голос
/ 24 июня 2019

Я искал разрешение в документации orika, но не нашел ничего связанного с этим вопросом.Я думаю, что нет хорошего способа решить эту проблему.С customMappers вы не можете заполнить fieldsMapping с необходимыми отношениями полей.Аналогично конвертерам (для этого случая).Мой обходной путь:

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

При исключении отношения отображения будет записываться в fieldsMapping (но с отношением <-> вместо «<->»).В моем случае это исключение не имеет смысла, но в fieldMappind (или classMapping) будет существовать связь

...