2016-04-19 2 views
0

У меня есть простой класс, который я хочу сопоставить с классом DTO с помощью modelMapper.Как использовать modelMapper для преобразования вложенных классов

class Source { 

    private String name; 
    private String address; 
    List<Thing> things; 

    // getters and setters follows 
    } 

    class Thing { 

    private String thingCode; 
    private String thingDescription; 

    // getters and setters 
} 

и я хочу, чтобы преобразовать их в sourceDTO, который содержит список ThingDTOs, например

class sourceDTO { 

    private String name; 
    private String address; 
    List<ThingDTO); 

    // getters and setters. 
    } 

    class ThingDTO { 

    private String thingCode; 
    private String thingDescription; 

    // getters and setters 
} 

Если я бросаю мой список вещей, и список ThingsDTO затем modelmapper это удовольствие использовать ,

modelMapper.map(source, SourceDTO.class); 

Но я не могу работать, как получить картографа, чтобы преобразовать список вещей Список ThingDTOs. Из документации, я думаю, мне нужно создать класс mapper, который расширяет PropertyMap, но я не могу понять, как его настроить.

Любые указатели на соответствующие документы будут приветствовать

ответ

1

Я думаю, если вы настраиваете ваш ModelMapper незакрепленных или STANDARD он будет делать для вас.

modelMapper = new ModelMapper(); 
modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.LOOSE); 

Otherwhise вы можете попробовать следующий:

  1. Вы можете создать преобразователь типа:

    public class ListThingToThingDTOConverter implements Converter<List<Thing>, List<ThingDTO>> { 
    
    
    @Override 
    public List<ThingDTO> convert(MappingContext<List<Thing>, List<ThingDTO>> context) { 
        List<Thing> source = context.getSource(); 
        List<ThingDTO> output = new ArrayList<>(); 
        ... 
        //Convert programmatically List<Thing> to List<ThingDTO> 
        ... 
    
        return output; 
        }} 
    
  2. Затем настроить отображение вещь ThingDTO в следующем:

    public class SourceToSourceDTOMap extends PropertyMap<Thing, ThingDTO> { 
          @Override 
          protected void configure(){ 
           using(new ListThingToThingDTOConverter()).map(source.getThings()).setThings(null); 
          } 
    
  3. Наконец, вы должны добавить SourceToSourceDTOMap к вашему ModelMapper, как показано ниже:

    modelMapper = new ModelMapper(); 
    modelMapper.addMappings(new SourceToSourceDTOMap()); 
    
Смежные вопросы