Как сопоставить две связанные сущности с одним объектом DTO с помощью ModelMapper

#java #spring #spring-boot

#java #весна #весенняя загрузка

Вопрос:

У меня есть две связанные сущности в моем приложении integratorDetails, IntegratorChannelDetails. Чего я хочу добиться, так это сопоставить integratorDetails и IntegratorChannelDetails с объектом DTO IntegratorAllInfoDto, который имеет поля, аналогичные объектам, с помощью ModelMapper, но я не уверен, как это сделать, ниже приведены объекты

integratorDetails

 import com.couchbase.client.java.repository.annotation.Field;

import com.couchbase.client.java.repository.annotation.Id;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.couchbase.core.mapping.Document;

import java.util.Date;
import java.util.List;

@Document
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class IntegratorDetails {
    @Id
    private String integratorId;
    @Field
    private String name;
    @Field
    private String accountId;
    @Field
    private String status;
    private String privateKey;
    private String publicKey;
    private List<ThirdPartyKey> thirdPartyKey;
    private Date createdTime;


}
  

IntegratorChannelDetails

 import com.couchbase.client.java.repository.annotation.Id;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.data.couchbase.core.mapping.Document;

import java.util.List;

@Document
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class IntegratorChannelDetails {
    @Id
    private String integratorChannelid;
    private String accountId;
    private String type;
    private List<ChannelType> channelTypes;
    private List<ChannelList> channelList;
    private List<String> fixedChannels;
    private String timeServiceUrl;
    private List<RibbonRules> ribbonRules;
    int numberOfSlots=4;


}
  

И мой Dto

 import com.tdchannels.admin.ms.channel.db.entity.ChannelList;
import com.tdchannels.admin.ms.channel.db.entity.RibbonRules;

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

import java.util.Date;
import java.util.List;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class IntegratorAllInfoDto<T> {

    private String integratorId;
    private String name;
    private String accountId;
    private String status;
    private Date createdTime;
    private List<ChannelTypeDto> channelTypes;
    private List<ChannelList> channelList;
    private List<String> fixedSlots;
    private String publicKey;
    private List<ThirdPartyKeyDto> thirdPartyKey;
    private List<RibbonRules> ribbonRules;

}
  

Ответ №1:

Если вам нужно сопоставить несколько объектов в один пункт назначения, вы делаете это следующим образом.

 ModelMapper modelMapper = new ModelMapper();
IntegratorDTO dto= modelMapper.map(details, IntegratorDTO.class);
//This will add additional values to the dto.
modelMapper.map(integratorChannelDetails, dto);
  

Ответ №2:

Нравится документация http://modelmapper.org/getting-started /

Вы можете объединить имена объектов в DTO, например:

 
Source model

// Assume getters and setters on each class
class Order {
  Customer customer;
  Address billingAddress;
}

class Customer {
  Name name;
}

class Name {
  String firstName;
  String lastName;
}

class Address {
  String street;
  String city;
}

  
 
Destination Model

// Assume getters and setters
class OrderDTO {
  String customerFirstName;
  String customerLastName;
  String billingStreet;
  String billingCity;
}