Вложенный объект сопоставления с 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));
}
}