2015-02-06 8 views
7

Ich arbeite an einem Spring Boot Projekt. Ich habe nur Annotationskonfiguration. Ich möchte Dozer einbeziehen, um Entitäten zu DTO und DTO zu Entitäten zu transformieren. Ich sehe auf der Dozer-Website, erklären sie, dass ich die folgende Konfiguration in Spring XML-Konfigurationsdatei hinzufügen muss. Da ich keine XML-Datei, sondern eine Java-Klasse für die Annotationskonfiguration habe, weiß ich nicht, wie ich dies in die Java-Konfigurationsklasse umsetzen soll.Wie verwende ich den Dozer mit Spring Boot?

<bean id="org.dozer.Mapper" class="org.dozer.DozerBeanMapper"> 
    <property name="mappingFiles"> 
    <list> 
     <value>dozer-global-configuration.xml</value> 
     <value>dozer-bean-mappings.xml</value> 
     <value>more-dozer-bean-mappings.xml</value> 
    </list> 
    </property> 
</bean> 

Wenn jemand Sie mir ein Beispiel geben könnte, wird es sehr nützlich sein. Dank

Antwort

12

Ich denke, so etwas wie dies funktionieren sollte:

@Configuration 
public class YourConfiguration { 

    @Bean(name = "org.dozer.Mapper") 
    public DozerBeanMapper dozerBean() { 
    List<String> mappingFiles = Arrays.asList(
     "dozer-global-configuration.xml", 
     "dozer-bean-mappings.xml", 
     "more-dozer-bean-mappings.xml" 
    ); 

    DozerBeanMapper dozerBean = new DozerBeanMapper(); 
    dozerBean.setMappingFiles(mappingFiles); 
    return dozerBean; 
    } 

    ... 
} 
+0

Vielen Dank für Ihre Vorschläge. Es ist was ich tue. – Pracede

4

Wenn Sie DozerBeanMapperFactoryBean statt DozerBeanMapper verwenden Sie so etwas wie dieses verwenden.

@Configuration 
public class MappingConfiguration { 

    @Bean 
    public DozerBeanMapperFactoryBean dozerBeanMapperFactoryBean(@Value("classpath*:mappings/*mappings.xml") Resource[] resources) throws Exception { 
     final DozerBeanMapperFactoryBean dozerBeanMapperFactoryBean = new DozerBeanMapperFactoryBean(); 
     // Other configurations 
     dozerBeanMapperFactoryBean.setMappingFiles(resources); 
     return dozerBeanMapperFactoryBean; 
    } 
} 

Auf diese Weise können Sie Ihre Mappings automatisch importieren. Dann injiziere einfach deinen Mapper und benutze ihn.

+1

Funktioniert genau, wie ich wollte, danke – MartinS

5

Nur für den Fall, dass jemand XML Dozer-Datei vermeiden möchte. Sie können einen Builder direkt in Java verwenden. Für mich ist es der Weg in eine Annotation Spring context zu gehen.

Weitere Informationen unter mapping api dozer

@Bean 
public DozerBeanMapper mapper() throws Exception { 
    DozerBeanMapper mapper = new DozerBeanMapper(); 
    mapper.addMapping(objectMappingBuilder); 
    return mapper; 
} 

BeanMappingBuilder objectMappingBuilder = new BeanMappingBuilder() { 
    @Override 
    protected void configure() { 
     mapping(Bean1.class, Bean2.class) 
       .fields("id", "id").fields("name", "name"); 
    } 
}; 

In meinem Fall ist es effizienter war (zumindest beim ersten Mal). Habe keine Benchmark oder irgendetwas gemacht.

+0

das ist gut, aber wenn Sie 20 Felder zu map haben, wiederholen Sie diese .fields ("ID", "ID"). Felder ("Name", "Name"); 20 mal? – valik

+0

Sie könnten versuchen, Annotation in Ihrer Klasse zu verwenden http://dozer.sourceforge.net/documentation/annotations.html –

+0

, was ich verstanden habe, müssen wir nicht Annotation in alle Felder private Long ID setzen; privater String-Name; In der Zielklasse werden alle Felder abgebildet, obwohl nur ein Feld zugeordnet ist. @Mapping ("binaryData") private String-Daten; – valik