Как распаковать список вложенных объектов DTO в список разных сущностей? - PullRequest
0 голосов
/ 06 мая 2020

У меня есть список DTO, и мне нужно сопоставить этот DTO с двумя разными списками объектов сущностей. Я новичок в Java и Springboot. Я нашел примеры, когда два DTO сопоставляются с одним объектом Entity. Например, http://modelmapper.org/getting-started/

Person Entity -> id, name.

Address Entity -> Street, State.

DTO:

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import java.util.List;
import lombok.Builder;
import lombok.Data;

@Data
@Builder
public class PersonDTO {

  private int id;

  private String name;

  @JsonInclude(Include.NON_NULL)
  private List<Address> address;
}

Мне нужно сопоставить список указанных выше DTO со списком нижеприведенных объектов сущностей:

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Person {

  private int id;
  private String name;

}
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Address {

  private int Street;
  private String State;

}

Как сопоставить список PersonDTO в список лиц и список адресов?

1 Ответ

1 голос
/ 06 мая 2020

Вы можете использовать org.modelmapper.TypeToken для отображения списка

List<Person> persons = modelmapper.map(personDTOs,new TypeToken<List<Person>>(){}.getType());

А для списка адресов используйте это

List<Address> addresses = personDTOs.stream().map(PersonDTO::getAddress)
            .flatMap(Collection::stream).collect(Collectors.toList());
...