加载目录中的所有推土机 xml 文件

Load all dozer xml files in a directory

在 Dozer 中,我们可以通过 setMappingFiles 函数将 XML 自定义映射文件注入 Dozer。

List myMappingFiles = new ArrayList();
myMappingFiles.add("dozerBeanMapping.xml");
myMappingFiles.add("someOtherDozerBeanMappings.xml"); DozerBeanMapper
mapper = new DozerBeanMapper();
mapper.setMappingFiles(myMappingFiles);

但我在资源类路径文件夹的目录中有 100 个 XML 文件。 将它们注入 Dozer 的最佳解决方案是什么?

我在 spring5 尝试这个:

  @Value("classpath*:dozer/*.xml")
  private Resource[] resources;

  @Bean(name = "org.dozer.Mapper")
  public DozerBeanMapper dozerBean() {
    DozerBeanMapper dozerBean = new DozerBeanMapper();
    dozerBean.setMappingFiles(resources); //this is wrong
    return dozerBean;
  }

我在 DozerBeanMapper 中没有找到提供这种方式的方法。

解决方法:将资源映射到 List<String>,您可以使用 DozerBeanMapper.setMappingFiles(List<String> mappingFileUrls).
请注意,您可以注入 List<Resources> 而不是更方便的 Resource[]

@Value("classpath*:dozer/*.xml")
private List<Resources> resources;

@Bean(name = "org.dozer.Mapper")
public DozerBeanMapper dozerBean() {
   List<String> xmlString = 
           resources.stream()
                    .map(t -> {
                                try {
                                      return t.getFile().toURI().toURL().toString();   
                                    }
                                    catch (IOException e) {
                                      throw new RuntimeException(e);
                                    }
                        })  
                     .collect(Collectors.toList());

    DozerBeanMapper dozerBean = new DozerBeanMapper();
    dozerBean.setMappingFiles(xmlString );
    return dozerBean;
}