У меня есть два объекта JPA: Person и Address и три DTO: PersonDto, AddressDto и BasicAddressDto. Класс AddressDto расширяет BasicAddressDto.
PersonDto имеет свойство, называемое адресом (тип: BasicAddressDto).
Однако я хотел бы заставить ModelMapper использовать экземпляр AddressDto вместо BasicAddressDto во время сопоставления Person с PersonDto.
Я написал следующий преобразователь:
Converter CONVERTER =
new AbstractConverter() {
@Override
protected BasicAddressDto convert(Address address) {
return new AddressDto(address.getUuid(), address.getStreet(), address.getCity());
}
};
и конфигурация ModelMapper:
ModelMapper modelMapper = new ModelMapper();
modelMapper.typeMap(Person.class, PersonDto.class).addMappings(mapper -> mapper.using(CONVERTER)
.map(Person::getAddress, PersonDto::setAddress));
К сожалению, я получаю сообщение об ошибке:
org.modelmapper.ConfigurationException: ModelMapper configuration errors:
1) Not able to skip address., because there are already nested properties are mapped: [address.uuid.]. Do you skip the property after the implicit mappings mapped? We recommended you to create an empty type map, and followed by addMappings and implicitMappings calls
Как исправить эту ошибку?
Остальная часть кода выглядит следующим образом:
@Test
void test() {
ModelMapper modelMapper = new ModelMapper();
modelMapper.typeMap(Person.class, PersonDto.class).addMappings(mapper -> mapper.using(CONVERTER)
.map(Person::getAddress, PersonDto::setAddress));
Person person = new Person(
UUID.randomUUID(), "John Doe", new Address(UUID.randomUUID(), "Palm Ave", "Gold Potato City"));
PersonDto personDto = modelMapper.map(person, PersonDto.class);
assertThat(personDto.getAddress()).isInstanceOf(AddressDto.class);
}
@Data
@AllArgsConstructor
class Person {
private UUID uuid;
private String name;
private Address address;
}
@Data
@AllArgsConstructor
class Address {
private UUID uuid;
private String street;
private String city;
}
@Getter
@Setter
class PersonDto {
private UUID uuid;
private String name;
private BasicAddressDto address;
}
@Getter
@Setter
class AddressDto extends BasicAddressDto {
private String street;
private String city;
public AddressDto(UUID uuid, String street, String city) {
super(uuid);
this.street = street;
this.city = city;
}
}
@Getter
@Setter
@AllArgsConstructor
class BasicAddressDto {
private UUID uuid;
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... ry-for-dto
Как правильно определить конвертер в библиотеке ModelMapper для DTO ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как преобразовать вложенные объекты в вложенные DTO с использованием ModelMapper?
Anonymous » » в форуме JAVA - 0 Ответы
- 93 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как преобразовать вложенные объекты в вложенные DTO с использованием ModelMapper?
Anonymous » » в форуме JAVA - 0 Ответы
- 48 Просмотры
-
Последнее сообщение Anonymous
-