Mapstruct нечувствительное к регистру отображение - PullRequest
1 голос
/ 01 апреля 2020

есть ли способ в mapstruct игнорировать регистр полей при отображении. скажем, я хочу отобразить следующие два класса

public class Customer {

    private String ID;

    public String getID() {
        return ID;
    }

    public void setID(String iD) {
        this.ID = iD;
    }
}


public class CustomerDetails {

    private String id;

    public String getId() {
        return ID;
    }

    public void setId(String id) {
        this.id = id;
    }

}

MapStruct не отображает поля автоматически, потому что имена методов-получателей не совпадают. Есть ли способ настроить MapStruct, чтобы игнорировать регистр полей и отображать их автоматически

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Может быть реализован пользовательский AccessorNamingStrategy, который будет вводить имя элемента в нижнем регистре и таким образом делать его нечувствительным к регистру.

Например,

public class CaseInsensitiveAccessorNamingStrategy extends DefaultAccessorNamingStrategy {

    @Override
    public String getPropertyName(ExecutableElement getterOrSetterMethod) {
        return super.getPropertyName( getterOrSetterMethod ).toLowerCase( Locale.ROOT );
    }

    @Override
    public String getElementName(ExecutableElement adderMethod) {
        return super.getElementName( adderMethod ).toLowerCase( Locale.ROOT );
    }
}
1 голос
/ 01 апреля 2020

Не уверен, что вы можете сконфигурировать mapstruct без учета регистра, но вы всегда можете определить, что должно отображаться следующим образом:

@Mapping(source = "ID", target = "id")
CustomerDetails toCustomerDetails(Customer customer);
...