2015-02-06 16 views
7

Pracuję nad projektem Spring Boot. Mam tylko konfigurację adnotacji. Chcę włączyć spychacz do przekształcenia jednostek w DTO i DTO w jednostki. Widzę na stronie spychacza, tłumaczą, że muszę dodać następującą konfigurację w pliku konfiguracyjnym Spring Xml. Ponieważ nie mam pliku XML, ale konfigurację adnotacji klasy Java, nie wiem, jak to przetłumaczyć na klasę konfiguracji Java.Jak używać Dozer z 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> 

Jeśli ktoś może podać mi przykład, będzie bardzo przydatny. Dzięki

Odpowiedz

12

Myślę, że coś jak to powinno działać:

@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

Dziękuję za sugestie. To właśnie robię. – Pracede

4

Jeśli używasz DozerBeanMapperFactoryBean zamiast DozerBeanMapper można użyć czegoś takiego.

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

W ten sposób możesz zaimportować swoje odwzorowania automatycznie. Następnie wystarczy wstrzyknąć Mappera i użyć.

@Autowired 
private Mapper mapper; 
+1

Działa dokładnie tak, jak chciałem, dziękuję – MartinS

5

Na wypadek, gdyby ktoś chciał uniknąć pliku xml dozer. Możesz użyć budowniczego bezpośrednio w java. Dla mnie jest to sposób, aby przejść w kontekście adnotacji Spring.

Zobacz więcej informacji na 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"); 
    } 
}; 

w moim przypadku to było bardziej efektywne (przynajmniej po raz pierwszy). Nie wykonałem żadnego testu porównawczego ani niczego.

+0

to jest dobre, ale jeśli masz 20 pól do odwzorowania, powtórzysz pola .fields ("id", "id"). Fields ("name", "name"); 20 razy? – valik

+0

Możesz spróbować użyć adnotacji w swojej klasie http://dozer.sourceforge.net/documentation/annotations.html –

+0

co zrozumiałem, że nie musimy umieszczać adnotacji we wszystkich polach prywatnych Long id; prywatna nazwa ciągu; w klasie docelowej wszystkie pola zostaną zmapowane, mimo że mamy tylko jedno zmapowane pole? @Mapowanie ("binaryData") prywatne dane ciągu; – valik