MapStruct - Как игнорировать ненужные методы / методы не-getter-setter в POJO - PullRequest
0 голосов
/ 08 ноября 2018

Ниже находится POJO:

public class TransferObjectListTO {

    private List<A> transferList;

    public List<A> getTransferList() {
        return transferList;
    }

    public void setList(List<A> transferList) {
        this.transferList= transferList;
    }

    public List<A> getList() {
        return getTransferList();
    }

    public void incrementList(List<A> transferList) {
        getTransferList().addAll(transferList);
    }

}

Имеет вид сумматора -

incrementList

вместе с методом дубликатов для получения -

GetList

В сгенерированном коде Mapstruct есть ненужный материал, который добавляет список, еще раз с типом источника:

if ( targetTypeTransferObjectListTO.getList() != null ) {
    List sourceTypeList = sourceTypeTransferObjectListTO.getList();
    if ( sourceTypeList != null ) {
        targetTypeTransferObjectListTO.getList().addAll( sourceTypeList );
    }
}

Мы не можем удалить эти методы - incrementList() and getList() в вышеупомянутом POJO, потому что он используется во многих местах. Теперь, как мы можем игнорировать эти методы, когда mapstruct генерирует реализацию для отображения?

1 Ответ

0 голосов
/ 08 ноября 2018

Есть несколько способов достичь того, что вы ищете. Проблема только в методе getList(), incrementList() уже игнорируется MapStruct.

Игнорировать отображение

Если у вас не много POJO с этим шаблоном, и у вас мало картографов, которые его используют, вы можете просто добавить

@Mapping(target = "list", ignore = true)

Напишите свой собственный AccessorNamingStrategy

Если у вас много POJO и много картографов, я бы предложил вам написать свой собственный AccessorNamingStrategy, который бы пометил метод getList() как OTHER метод.

public class CustomAccessorNamingStrategy extends DefaultAccessorNamingStrategy {

    @Override
    public boolean isGetterMethod(ExecutableElement method) {
        if (method.getSimpleName().toString().equals("getList")) {
            return false;
        } else {
            return super.isGetterMethod(method);
        }
    }
}
...