Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用带弹簧靴的推土机?_Java_Spring_Annotations_Dto_Dozer - Fatal编程技术网

Java 如何使用带弹簧靴的推土机?

Java 如何使用带弹簧靴的推土机?,java,spring,annotations,dto,dozer,Java,Spring,Annotations,Dto,Dozer,我正在做一个Spring Boot项目。我只有注释配置。我想包括将实体转换为DTO和DTO转换为实体的推土机。我在dozer网站上看到,他们解释说我必须在SpringXML配置文件中添加以下配置。因为我并没有xml文件,而是注释配置Java类,所以我不知道如何将其转换为Java配置类 <bean id="org.dozer.Mapper" class="org.dozer.DozerBeanMapper"> <property name="mappingFiles">

我正在做一个Spring Boot项目。我只有注释配置。我想包括将实体转换为DTO和DTO转换为实体的推土机。我在dozer网站上看到,他们解释说我必须在SpringXML配置文件中添加以下配置。因为我并没有xml文件,而是注释配置Java类,所以我不知道如何将其转换为Java配置类

<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>

dozer-global-configuration.xml
dozer-bean-mappings.xml
more-dozer-bean-mappings.xml

如果有人能给我举个例子,那将非常有用。谢谢

我觉得这样应该行得通:

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

  ...
}
@配置
公共类配置{
@Bean(name=“org.dozer.Mapper”)
公共dozerBean映射dozerBean(){
List mappingFiles=Arrays.asList(
“推土机全局配置.xml”,
“dozerbean mappings.xml”,
“更多dozer bean mappings.xml”
);
DozerBeanMapper dozerBean=新的DozerBeanMapper();
setMappingFiles(mappingFiles);
返回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;
    }
}
这样,您可以自动导入映射。而不是简单地插入映射器并使用

@Autowired
private Mapper mapper;
使用推土机5.5.1更新

在推土机5.5.1中,删除了推土机BeanMapperFactoryBean。因此,如果您想使用更新版本,您需要执行以下操作:

@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;
}
使用下面的例子

mapper.map(source_object, destination.class);
例如。
map(admin,UserDTO.class)

以防有人想避开xml dozer文件。您可以直接在java中使用生成器。对我来说,这是在Spring上下文中进行注释的方式

有关更多信息,请参阅


在我的情况下,它更有效(至少第一次)。没有做任何基准测试或任何事情。

感谢您的建议。这就是我正在做的。这很好,但如果你有20个字段要映射,你会重复这个。字段(“id”,“id”)。字段(“name”,“name”);20次?你可以试着在你的课堂上使用注释。我的理解是,我们不必在所有字段中都使用注释;私有字符串名称;在目标类中,所有字段都将被映射,即使我们只有一个字段被映射@映射(“二进制数据”)私有字符串数据;我没有试过,但这是我的理解。如果需要的话,您可以排除字段。这里的聚会迟到了,但是我在dozer 5.5.1版本中找不到org.dozer.spring包。DozerBeanMapperFactoryBean是否已被替换/移动?@sMaN是的,它已在Dozer 5.5.1中删除。可以通过使用:
new DozerBeanMapper(mappingFileUrlList)
稍微改进。为什么不使用
DozerBeanMapperSingletonWrapper.getInstance()
mapper.map(source_object, destination.class);
    @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");
    }
};