2015-02-06 27 views
7

Sto lavorando a un progetto Spring Boot. Ho solo la configurazione delle annotazioni. Voglio includere Dozer per trasformare Entità in DTO e DTO in Entità. Vedo nel sito web dozer, spiegano che devo aggiungere la seguente configurazione nel file di configurazione xml di primavera. Dato che non ho il file XML ma la classe Java di configurazione delle annotazioni, non so come tradurre questo in classe di configurazione Java.Come usare il Dozer con 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> 

Se qualcuno potrebbe darmi un esempio, sarà molto utile. Grazie

risposta

12

penso che qualcosa del genere dovrebbe funzionare:

@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

Grazie per i vostri suggerimenti. È quello che sto facendo. – Pracede

4

Se si utilizza invece di DozerBeanMapperFactoryBeanDozerBeanMapper si può usare qualcosa di simile.

@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; 
    } 
} 

In questo modo è possibile importare automaticamente i mapping. Che semplice iniettare il tuo Mapper e usarlo.

@Autowired 
private Mapper mapper; 
+1

Funziona esattamente come volevo, grazie – MartinS

5

Nel caso in cui qualcuno volesse evitare il file dozer xml. Puoi usare un costruttore direttamente in java. Per me è la strada da percorrere in un contesto di annotazione di primavera.

Tutte le informazioni a 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"); 
    } 
}; 

Nel mio caso è stato più efficiente (almeno la prima volta). Non ha fatto alcun punto di riferimento o altro.

+0

questo è buono ma se hai 20 campi da mappare dovrai ripetere questo campo .fields ("id", "id"). Fields ("name", "name"); 20 volte? – valik

+0

Si potrebbe provare a utilizzare l'annotazione nella classe http://dozer.sourceforge.net/documentation/annotations.html –

+0

quello che ho capito è che non dobbiamo mettere l'annotazione in tutti i campi private Long id; nome stringa privato; nella classe target tutti i campi verranno mappati anche se abbiamo un solo campo mappato? @Mapping ("binaryData") dati stringa privati; – valik