我有這種關系(Spring Boot JPA 實作):
一個人有多個地址
一個地址包含一個國家
public class Person {
private Integer id;
private Integer name;
private Integer age;
//relations
}
public class Address {
private Integer id;
private Integer person_id;
private String street;
private String city;
private String country_id;
private Boolean preferred;
//relations
}
public class Country {
private Integer id;
private Integer description;
//relations
我想以這種方式回傳一個 DTO
public class PersonDto {
private Integer id;
private Integer name;
private Integer age;
private String street;
private String city;
private Integer country //description;
但事實上我想要
- 只回傳人的首選地址(只能有一個)。
- 僅獲取地址嵌套類中的國家/地區描述
ModelMapper (AddMapping Strategy) 可以實作
謝謝,
uj5u.com熱心網友回復:
一種選擇是使用Converter.
import org.modelmapper.Converter;
import org.modelmapper.spi.MappingContext;
public class PersonToDtoConverter implements Converter<Person, PersonDto> {
@Override
public PersonDto convert(MappingContext<Person, PersonDto> context) {
Person source = context.getSource();
PersonDto destination = context.getDestination();
if (destination == null) {
destination = new PersonDto();
}
destination.setId(source.getId());
destination.setName(source.getName());
destination.setAge(source.getAge());
Address address = source.getAddresses().stream().filter(Address::getPreferred).findFirst().orElse(null);
if (address != null) {
destination.setStreet(address.getStreet());
destination.setCity(address.getCity());
destination.setCountry(address.getCountry().getDescription());
}
return destination;
}
}
然后您需要向ModelMapper實體注冊轉換器。
import org.modelmapper.ModelMapper;
import java.util.ArrayList;
import java.util.List;
public class Mappings {
public static void main(String[] args) {
//setup
Country germany = new Country();
germany.setId(1);
germany.setDescription(11);
Address address = new Address();
address.setCountry(germany);
address.setCity("Munich");
address.setId(1);
address.setCountry_id("DE");
address.setStreet("some street");
address.setPreferred(true);
address.setPerson_id(1);
Person person = new Person();
person.setId(1);
person.setAge(29);
person.setName(111);
List<Address> addresses = new ArrayList<>();
addresses.add(address);
person.setAddresses(addresses);
//convert
ModelMapper modelMapper = new ModelMapper();
modelMapper.addConverter(new PersonToDtoConverter());
PersonDto personDto = modelMapper.map(person, PersonDto.class);
System.out.println(personDto);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/424560.html
