Как правильно определить конвертер в библиотеке ModelMapper для DTOJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как правильно определить конвертер в библиотеке ModelMapper для DTO

Сообщение Anonymous »

У меня есть два объекта 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как я могу использовать записи Java в качестве DTO с ModelMapper?
    Anonymous » » в форуме JAVA
    0 Ответы
    66 Просмотры
    Последнее сообщение Anonymous
  • Как я могу использовать записи Java в качестве DTO с ModelMapper?
    Anonymous » » в форуме JAVA
    0 Ответы
    51 Просмотры
    Последнее сообщение Anonymous
  • Как преобразовать вложенные объекты в вложенные DTO с использованием ModelMapper?
    Anonymous » » в форуме JAVA
    0 Ответы
    93 Просмотры
    Последнее сообщение Anonymous
  • Как преобразовать вложенные объекты в вложенные DTO с использованием ModelMapper?
    Anonymous » » в форуме JAVA
    0 Ответы
    48 Просмотры
    Последнее сообщение Anonymous
  • Путаница и проблемы с исходным DTO и целевым DTO [закрыто]
    Anonymous » » в форуме JAVA
    0 Ответы
    75 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»