当前位置: 首页 > 知识库问答 >
问题:

如何使用带推土机的CustomConverter将多个实体转换为具有列表字段的一个实体?

班高明
2023-03-14

我有一个实体列表,这些实体又有另一个(可嵌入)类型的字段
所有这些实体都应转换为一个bean,其中包含这些可嵌入类型的列表。在使用推土机之前,我编写了一个转换方法。我已经把这个放进了dozerBeanMapping。xml:

<custom-converters>
    <converter type="com.foo.bar.helper.ChargingPoiEntityToPoiConverter" >
        <class-a>com.foo.bar.services.charging.repository.ChargingPoiEntity</class-a>
        <class-b>com.foo.bar.beans.ChargingPoi</class-b>
  </converter>
</custom-converters> 

我这样实例化推土机:

final Mapper mapper = DozerBeanMapperSingletonWrapper.getInstance();

我必须调用哪个map方法?使用

mapper.map(cpEntities, Cp.class);

未调用自定义转换器。

试图唤起

mapper.map(cpEntities.get(0), Cp.class);

很好,但我必须转换列表

我如何才能实现这一点?

共有1个答案

薛俊美
2023-03-14

映射器。map(实体,Cp.class) 与自定义转换器不匹配,因为列表中的泛型类型信息

一种解决方法是在ChargingPoiEntity数组和ChargingPoi之间定义自定义转换器:

<custom-converters>
  <converter type="com.foo.bar.helper.ChargingPoiEntityToPoiConverter" >
    <class-a>[Lcom.foo.bar.services.charging.repository.ChargingPoiEntity;</class-a>
    <class-b>com.foo.bar.beans.ChargingPoi</class-b>
  </converter>
</custom-converters>

映射时,可以将cpEntities列表转换为数组:

ChargingPoiEntity[] entityArray = cpEntities.toArray(
            new ChargingPoiEntity[cpEntities.size()]);
ChargingPoi convertedList = mapper.map(entityArray, ChargingPoi.class);

请注意,在这种情况下,执行此操作时不会调用自定义转换器

mapper.map(cpEntities.get(0), ChargingPoi.class);

仅当尝试通过映射器直接映射泛型集合时,此问题才适用。地图(…);包含泛型集合作为字段的实体应该映射良好。

 类似资料:
  • 我有2个对象ExpertJpa到ExpertDto的现有映射,需要另一个参数来过滤ExpertJpa。这个映射工作正常,现在我尝试将ExpertJpa列表转换为ExpertDto列表,我添加了第二个参数。 在构建时,我收到错误消息,即List是一个接口,不能是实例…… 错误:(53,18) java:返回类型java.util.List是一个抽象类或接口。提供非抽象/非接口结果类型或工厂方法。

  • 假设我已将以下对象序列化为json字符串: 现在我想反序列化它,但是我想把名称分成两个字段,和。我该怎么做呢? 我希望最终的结果是类似于: 这对Gson有可能吗?

  • 我有一个类,有多个成员。 还有一个类,只有两个属性: 我需要遍历类中的各种列表,并创建类对象,并添加到这样的列表中: 这里重复了if和for循环。 如何使用Java流实现这一点? 注意:类,和之间没有关系,也没有公共接口。

  • 我需要使用MapStruct将一些实体和实体列表转换为单个DTO。此DTO包括嵌套列表。 假设,我有以下持久性支持的POJO: 以及这些实体的一些集合: DTO如下所示: 和嵌套的DTO: 除SomeLink列表外,我需要从实体映射的所有字段: 我填充的嵌套列表如下: 结果涉及大量手动转换: 有没有办法通过使用MapStruct的功能来完成同样的工作?就像这样:

  • 问题内容: 我有3个具有ManyToMany关系的实体: 角色实体: 权限实体: 功能实体: 我做了以下事情: 我创建了3个功能: 然后创建2个权限: Permission2 with Functionality2, Functionality3 然后创建一个角色: 我收到以下异常: java.lang.IllegalStateException:同一实体[com.persistence.enti