Better way of mapping two objects using org.mapstruct.Mapper

Sheyko Dmitriy :

Let's say I have two classes I want to map. I managed to do it using two methods in my @Mapper from org.mapstruct

//copy all fields with same name from client.getPerson() with partialUpridClientInfoFromPerson
//than add some additional fields
default UpridClientInfo toUpridClientInfo(AccountLevel level, Client client) {
    UpridClientInfo result = partialUpridClientInfoFromPerson(client.getPerson());
    result.setAccountLevel(level);
    result.setBankCode(client.getBank().getCode());
    return result;
}

UpridClientInfo partialUpridClientInfoFromPerson(Person person);

Is there a way to do this better? Probably just using @Mapping and/or @Named annotation?

Tuom :

Maybe it's possible to do it even better, but this is a little bit better solution.

default UpridClientInfo toUpridClientInfo(AccountLevel level, Client client) {
    return toUpridClientInfo(level, client.getPerson(), client.getBank());
}

@Mapping(source = "level", target = "accountLevel")
@Mapping(source = "bank.code", target = "bankCode")
UpridClientInfo toUpridClientInfo(AccountLevel level, Person person, Bank bank);

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=238295&siteId=1