2015-02-06 32 views
7

我正在開發Spring Boot項目。我只有註釋配置。我想包括推土機將實體轉換爲DTO和DTO實體。我在推土機網站上看到,他們解釋說我必須在spring xml配置文件中添加以下配置。由於我沒有XML文件,但註釋配置Java類,我不知道如何將其轉換成Java配置類。如何在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> 

如果有人能給我一個例子,它會非常有用。由於

回答

12

我覺得這樣的事情應該工作:

@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

感謝您的建議。這就是我正在做的。 – Pracede 2015-02-06 20:51:40

4

如果您正在使用DozerBeanMapperFactoryBean代替DozerBeanMapper你可以使用這樣的事情。

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

這樣你就可以自動導入你的映射。比簡單的注入你的Mapper並使用。

@Autowired 
private Mapper mapper; 
+1

完全按照我的意願工作,謝謝 – MartinS 2016-05-23 10:52:40

5

以防萬一有人想避免XML文件推土機。您可以直接在java中使用構建器。對我來說,這是註解Spring上下文的方式。

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"); 
    } 
}; 

對我來說,這是更有效(至少第一時間)查看更多信息。沒有做任何基準或任何事情。

+0

這是好的,但如果你有20個字段來映射你將重複這個.fields(「id」,「id」)。fields(「name」,「name」); 20次? – valik 2017-12-24 17:13:36

+0

你可以嘗試在你的課程中使用註釋http://dozer.sourceforge.net/documentation/annotations.html – 2017-12-27 04:12:33

+0

我的理解是我們不必在所有字段中都註釋private Long id; 私人字符串名稱;在目標類中,即使我們只映射了一個字段,所有字段都將被映射? @Mapping(「binaryData」) private String data; – valik 2017-12-27 09:30:20