web-dev-qa-db-ja.com

Spring BootでDozerを使用する方法

私はSpring Bootプロジェクトに取り組んでいます。注釈の設定があります。エンティティをDTOに変換し、DTOをエンティティに変換するドーザーを含めたいと思います。私はブルドーザーのWebサイトで、Spring xml構成ファイルに次の構成を追加する必要があると説明しています。私は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>

誰かが私に例を挙げてもらえればそれは非常に役に立ちます。ありがとう

11
Pracede

私はこのようなものがうまくいくと思います:

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

  ...
}
18
micha

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;

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(admin、UserDTO.class);

9
bhdrkn

誰かがxml dozerファイルを避けたい場合に備えて。 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");
    }
};

私の場合、それはより効率的でした(少なくとも初めて)。ベンチマークも何もしませんでした。

8
Xavier Bouclet