Вложенный объект сопоставления с mapstruct

Я создаю отображение, как показано ниже. Как сопоставить плоские свойства объекта dto, такие как (улица, город и т. д.), с вложенным адресом в объекте домена. Когда я пытаюсь, у меня есть ошибка:

[ошибка] диагностика: неизвестное свойство " адрес.postalCode " взамен тип. @Mapping (source = "city", target = " address.город"),

@Mapper(componentModel = "spring", uses = {})
public interface CompanyMapper {
    @Mappings({
            @Mapping(source = "id", target = "id"),
            @Mapping(source = "street", target = "address.street"),
            @Mapping(source = "city", target = "address.city"),
            @Mapping(source = "postalCode", target = "address.postalCode"),
            @Mapping(source = "province", target = "address.province"),
    })
    DomainObject map(DtoObject dto);

и классы...

public class Address {
            private String street;
            private Integer streetNumber;
            private String city;
            private String postalCode;
            private String province;
            //getters and setters
    }
public class DomainObject {
        private String id;
        private Address address;
        //getters and setters
}

public class DtoObject {
        private String id;
        private String street;
        private String city;
        private String postalCode;
        private String province;
        //getters and setters
}

2 ответов


вложения на целевой стороне, как вы пытаетесь использовать его, пока не поддерживается. Для этого есть запрос функции (выпуск #389), но мы еще не добрались до реализации этого.


Я не мог найти способ сделать это в один метод. Вот мое решение :

@Mapper
public interface DtoObjectMapper {

    Address toAddress(DtoObject dtoObject);

    DomainObject toDomainObject(DtoObject dtoObject, Address address);

}

при использовании ;

@Component
public class SomeClass {

    @Autowired
    private DtoObjectMapper dtoObjectMapper;

    public DomainObject convert(DtoObject dtoObject) {
        return dtoObjectMapper.toDomainObject(dtoObject, dtoObjectMapper.toAddress(dtoObject));
    }
}