Spring Boot 如何使用 Dozer?
How to use Dozer with Spring Boot?
我正在开发一个 Spring 引导项目。我只有注释配置。我想包括推土机以将实体转换为 DTO 并将 DTO 转换为实体。我在推土机网站上看到,他们解释说我必须在 spring xml 配置文件中添加以下配置。由于我没有 xml 文件,而是注释配置 Java class,我不知道如何将其转换为 Java 配置 class。
<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>
如果有人能给我举个例子,那将非常有用。谢谢
我认为这样的事情应该可行:
@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;
}
...
}
如果您使用 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;
Update with Dozer 5.5.1
在 dozer 5.5.1 中,删除了 DozerBeanMapperFactoryBean。因此,如果您想使用更新版本,则需要执行以下操作,
@Bean
public Mapper mapper(@Value(value = "classpath*:mappings/*mappings.xml") Resource[] resourceArray) throws IOException {
List<String> mappingFileUrlList = new ArrayList<>();
for (Resource resource : resourceArray) {
mappingFileUrlList.add(String.valueOf(resource.getURL()));
}
DozerBeanMapper dozerBeanMapper = new DozerBeanMapper();
dozerBeanMapper.setMappingFiles(mappingFileUrlList);
return dozerBeanMapper;
}
现在按照上面的说明注入映射器
@Autowired
private Mapper mapper;
并像下面的例子一样使用,
mapper.map(source_object, destination.class);
例如。
mapper.map(管理员, UserDTO.class);
以防万一有人想避开 xml 推土机文件。您可以直接在 java 中使用构建器。对我来说,这是进入注释 Spring 上下文的方式。
查看更多信息
@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");
}
};
在我的例子中,它更有效率(至少是第一次)。没有做任何基准测试或任何事情。
我正在开发一个 Spring 引导项目。我只有注释配置。我想包括推土机以将实体转换为 DTO 并将 DTO 转换为实体。我在推土机网站上看到,他们解释说我必须在 spring xml 配置文件中添加以下配置。由于我没有 xml 文件,而是注释配置 Java class,我不知道如何将其转换为 Java 配置 class。
<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>
如果有人能给我举个例子,那将非常有用。谢谢
我认为这样的事情应该可行:
@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;
}
...
}
如果您使用 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;
Update with Dozer 5.5.1
在 dozer 5.5.1 中,删除了 DozerBeanMapperFactoryBean。因此,如果您想使用更新版本,则需要执行以下操作,
@Bean
public Mapper mapper(@Value(value = "classpath*:mappings/*mappings.xml") Resource[] resourceArray) throws IOException {
List<String> mappingFileUrlList = new ArrayList<>();
for (Resource resource : resourceArray) {
mappingFileUrlList.add(String.valueOf(resource.getURL()));
}
DozerBeanMapper dozerBeanMapper = new DozerBeanMapper();
dozerBeanMapper.setMappingFiles(mappingFileUrlList);
return dozerBeanMapper;
}
现在按照上面的说明注入映射器
@Autowired
private Mapper mapper;
并像下面的例子一样使用,
mapper.map(source_object, destination.class);
例如。 mapper.map(管理员, UserDTO.class);
以防万一有人想避开 xml 推土机文件。您可以直接在 java 中使用构建器。对我来说,这是进入注释 Spring 上下文的方式。
查看更多信息 @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");
}
};
在我的例子中,它更有效率(至少是第一次)。没有做任何基准测试或任何事情。