将项目列表转换为单个对象
Converting a list of items to a single object
我需要将项目列表转换为单个 dto 项目。如果列表中有任何元素,我们取第一个。
我用这种方式实现了转换器接口,但它不起作用。转换后目标项为空。
public class LocationConverter implements Converter<List<Location>,LocationDto> {
@Override
public LocationDto convert(MappingContext<List<Location>, LocationDto> mappingContext) {
ModelMapper modelMapper = new ModelMapper();
List<Location> locations = mappingContext.getSource();
LocationDto locationDto = mappingContext.getDestination();
if (locations.size() >= 1) {
Location location = locations.get(0);
modelMapper.map(location, locationDto);
return locationDto;
}
return null;
}
}
ModelMapper modelMapper = new ModelMapper();
modelMapper.addConverter(new LocationConverter());
Event event = new Event();
modelMapper.map(event, eventDto);
我应用此转换器的实体如下所示:
public class Event extends BasicEntity {
private Integer typeId;
private String typeName;
private List<Location> locationList;
}
public class EventDto {
private Integer typeId;
private String typeName;
private LocationDto location;
}
因此我需要将 Event 中的位置列表转换为 EventDto 中的 LocationDto。
我们可以为每个 属性 映射定义一个转换器,这意味着我们可以使用自定义转换器将 locationList 映射到位置。
和Java8
modelMapper.typeMap(Event.class, EventDto.class).addMappings(
mapper -> mapper.using(new LocationConverter()).map(Event::getLocationList, EventDto::setLocation));
有Java 6/7
modelMapper.addMappings(new PropertyMap() {
@Override
protected void configure() {
using(new LocationConverter()).map().setLocation(source.getLocationList());
}
});
我需要将项目列表转换为单个 dto 项目。如果列表中有任何元素,我们取第一个。 我用这种方式实现了转换器接口,但它不起作用。转换后目标项为空。
public class LocationConverter implements Converter<List<Location>,LocationDto> {
@Override
public LocationDto convert(MappingContext<List<Location>, LocationDto> mappingContext) {
ModelMapper modelMapper = new ModelMapper();
List<Location> locations = mappingContext.getSource();
LocationDto locationDto = mappingContext.getDestination();
if (locations.size() >= 1) {
Location location = locations.get(0);
modelMapper.map(location, locationDto);
return locationDto;
}
return null;
}
}
ModelMapper modelMapper = new ModelMapper();
modelMapper.addConverter(new LocationConverter());
Event event = new Event();
modelMapper.map(event, eventDto);
我应用此转换器的实体如下所示:
public class Event extends BasicEntity {
private Integer typeId;
private String typeName;
private List<Location> locationList;
}
public class EventDto {
private Integer typeId;
private String typeName;
private LocationDto location;
}
因此我需要将 Event 中的位置列表转换为 EventDto 中的 LocationDto。
我们可以为每个 属性 映射定义一个转换器,这意味着我们可以使用自定义转换器将 locationList 映射到位置。
和Java8
modelMapper.typeMap(Event.class, EventDto.class).addMappings(
mapper -> mapper.using(new LocationConverter()).map(Event::getLocationList, EventDto::setLocation));
有Java 6/7
modelMapper.addMappings(new PropertyMap() {
@Override
protected void configure() {
using(new LocationConverter()).map().setLocation(source.getLocationList());
}
});