Mapstructs генерирует неправильный код в MapperImpl - PullRequest
0 голосов
/ 05 июня 2018

Мой маппер выглядит так:

@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public abstract class PersonMapper
{
    @Mapping(target = "someModel", source = "someEto")
    @Mapping(target = "someModel.bloodGroup", source = "someOtherEto.bloodGroup")
    @Mapping(target = "someModel.nature", source = "someOtherEto.nature")
    public abstract PersonModel mapPersonCtoToPersonModel(PersonCto personCto);
}

, который генерирует следующее значение Impl

@Override
public PersonModel mapPersonCtoToPersonModel(PersonCto personCto) {
    if ( personCto == null ) {
        return null;
    }

    PersonModel personModel = new PersonModel();

    personModel.setSomeModel( someOtherEtoToSomeModel( personCto.getSomeOtherEto() ) );
    personModel.setSomeModel( someEtoToSomeModel( personCto.getSomeEto() ) );

    return personModel;
}

Но, если дважды установить someModel, заменит уже установленную модель.Это нормальное поведение для Mapstruct?Что-нибудь, что я могу сделать, чтобы это работало кроме AfterMapping?Потому что у меня достаточно большие и сложно вложенные модели и этос.

1 Ответ

0 голосов
/ 05 июня 2018

Вы должны создать мапперы для каждого вложенного класса (код не проверен):

@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public abstract class SomeModelMapper {     
    public abstract SomeModel map(SomeEto someEto);
}

@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE, uses = { SomeModelMapper.class })
public abstract class PersonMapper {
    @Mapping(target = "someModel", source = "someEto")
    public abstract PersonModel map(PersonCto personCto);
}

Или вы также можете сделать это по-своему, но первое @Mapping необходимо удалить:

@Mapper(unmappedTargetPolicy = ReportingPolicy.IGNORE)
public abstract class PersonMapper {
    // @Mapping(target = "someModel", source = "someEto")
    @Mapping(target = "someModel.bloodGroup", source = "someOtherEto.bloodGroup")
    @Mapping(target = "someModel.nature", source = "someOtherEto.nature")
    public abstract PersonModel mapPersonCtoToPersonModel(PersonCto personCto);
}
...