2016-07-14 11 views
0

Ich bin versuchenDemoEntity zu DemoDto zu konvertieren. Und sie haben Kind Attribut Collection<SubEntity> und Collection<SubDto>. Fehler beim Konvertieren von Collection<SubEntity>. Wenn ich @JMap("subEntities") nicht hinzufüge, würde JMapper gut funktionieren. Jetzt möchte ich, dass beim Konvertieren DemoEntity, Collection<SubEntity> zusammen konvertiert werden könnte.JMapper Kind Sammlung <Entity> zur Sammlung umwandeln <Dto>

public class DemoEntity { 
 

 
    /** The id. */ 
 

 
    private int id; 
 

 
    /** The code. */ 
 
    private String code; 
 

 
    /** The date. */ 
 
    private Date date; 
 

 
    private Collection<SubEntity> subEntities; 
 

 
    @JMapConversion(from = "date", to = "date") 
 
    public String convertDate(Date date) { 
 
     return date.toString(); 
 
    } 
 

 
    public DemoEntity(int id, String code, Date date, Collection<SubEntity> subEntities) { 
 
     super(); 
 
     this.id = id; 
 
     this.code = code; 
 
     this.date = date; 
 
     this.subEntities = subEntities; 
 
    } 
 
    
 

 
    ...setter and getter... 
 
}

public class DemoDto { 
 

 
    /** The id. */ 
 
    @JMap 
 
    private Long id; 
 

 
    /** The code. */ 
 
    @JMap 
 
    private String code; 
 

 
    /** The date. */ 
 
    @JMap 
 
    private String date; 
 

 
    @JMap("subEntities") 
 
    private Collection<SubDto> subDtos; 
 

 
    ... setter and getter... 
 
}

Die Hauptmethode ist unten:

 Collection<SubEntity> subEntities = new ArrayList<>(); 
 
     for (int i = 1; i < 100; i++) { 
 
      SubEntity subEntity = new SubEntity(i, "C" + i, new Date()); 
 
      subEntities.add(subEntity); 
 
     } 
 
     DemoEntity demoEntity = new DemoEntity(1, "D" + 1, new Date(), subEntities); 
 

 

 
     JMapperAPI api = new JMapperAPI(); 
 
     MappedClass mappedClass = new MappedClass(SubDto.class); 
 
     api.add(mappedClass); 
 
     JMapper<DemoDto, DemoEntity> mapper = new JMapper<>(DemoDto.class, DemoEntity.class, api); 
 
     DemoDto demoDto = mapper.getDestination(demoEntity); 
 
     System.out.println(demoDto);
Eine Ausnahme Ion geschah, als verdeckte DemoEntity.subEntities zu DemoDto.subDtos
Exception in thread "main" com.googlecode.jmapper.exceptions.JMapperException: java.lang.NullPointerException 
 
\t at com.googlecode.jmapper.config.JmapperLog.ERROR(JmapperLog.java:46) 
 
\t at com.googlecode.jmapper.JMapper.<init>(JMapper.java:445) 
 
\t at com.googlecode.jmapper.JMapper.<init>(JMapper.java:411) 
 
\t at com.googlecode.jmapper.JMapper.<init>(JMapper.java:385) 
 
\t at com.jmapper.JmapperDemo.main(JmapperDemo.java:35) 
 
Caused by: java.lang.NullPointerException 
 
\t at com.googlecode.jmapper.operations.complex.AComplexOperation.newInstance(AComplexOperation.java:107) 
 
\t at com.googlecode.jmapper.operations.complex.AComplexOperation.newInstance(AComplexOperation.java:98) 
 
\t at com.googlecode.jmapper.operations.recursive.MappedCollectionOperation.sharedCode(MappedCollectionOperation.java:64) 
 
\t at com.googlecode.jmapper.operations.complex.AComplexOperation.sourceControl(AComplexOperation.java:156) 
 
\t at com.googlecode.jmapper.operations.complex.AComplexOperation.genericFlow(AComplexOperation.java:133) 
 
\t at com.googlecode.jmapper.operations.complex.AComplexOperation.write(AComplexOperation.java:89) 
 
\t at com.googlecode.jmapper.generation.MapperConstructor.mapping(MapperConstructor.java:154) 
 
\t at com.googlecode.jmapper.generation.MapperConstructor.wrappedMapping(MapperConstructor.java:123) 
 
\t at com.googlecode.jmapper.generation.MapperConstructor.getMappings(MapperConstructor.java:89) 
 
\t at com.googlecode.jmapper.generation.MapperGenerator.generateMapperClass(MapperGenerator.java:54) 
 
\t at com.googlecode.jmapper.generation.MapperBuilder.generate(MapperBuilder.java:88) 
 
\t at com.googlecode.jmapper.JMapper.createMapper(JMapper.java:458) 
 
\t at com.googlecode.jmapper.JMapper.<init>(JMapper.java:440) 
 
\t ... 3 more

Außerdem ist es eine Methode Collection<Entity> zu Collection<Dto>

Antwort

0

, müssen Sie Dies ist ein Fall von rekursiven Mapping konvertieren Subklassen zuordnen. Wenn Sie DemoDTO mit DemoEntity abbilden, müssen Sie SubDTO mit SubEntity abbilden.

+0

Vielen Dank für Ihre Antwort, ich benutze so. Es klappt. Aber schließlich benutze ich MapStruct, da es schneller ist. –