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

如何使用依赖于多个DTO变量的mapstruct执行映射

龚勇锐
2023-03-14

我使用mapstruct将我的DTO映射到它对应的实体。

DTO 包含一个哈希映射变量,其条目应映射到特殊哈希映射实体的键和值变量。这就是为什么我用一个额外的方法描述这个映射,如下所示:

@Mapper
public interface MyMapper {

      MyMapper INSTANCE = Mappers.getMapper(MyMapper.class);

      @Mapping(source = "myHashMap", target = "myHashMapEntityList", qualifiedByName = "mapMyHashMap")
      MyEntity mapToEntity(MyDTO dto);

      @Named("mapMyHashMap")
      static List<myHashMapEntity> mapMyHashMap(final Map<String, String> myHashMap) {
          ...
      }
}

这工作正常。我遇到的唯一问题是我不想映射哈希映射的所有条目。我只想映射条目,其键包含在列表键ToBe映射列表中。虽然可以从 dto 构造此键到被映射列表,但此变量不是 dto 的一部分。我想知道如何执行我的映射。

我的问题是:

是否可以在此MyMapper接口内计算此keysToBeMappedList,然后在方法内使用此列表?因为即使这是不可能的,并且我将keysToBeMappedList作为dto的一部分,我仍然必须使用mapMyHashMap中的 myHashMap来执行映射。我从未见过在这些mapstructhtml" target="_blank">方法中使用过多个变量。

我希望我想做的事情或多或少都清楚了。有人能帮忙吗?

共有2个答案

萧修永
2023-03-14

可以向方法添加更多参数:

import org.mapstruct.Context;
@Mapper
public interface MyMapper {

      MyMapper INSTANCE = Mappers.getMapper(MyMapper.class);

      @Mapping(source = "myHashMap", target = "myHashMapEntityList", qualifiedByName = "mapMyHashMap")
      MyEntity mapToEntity(MyDTO dto, @Context List<String> keysToBeMappedList);

      @Named("mapMyHashMap")
      static List<myHashMapEntity> mapMyHashMap(final Map<String, String> myHashMap, @Context List<String> keysToBeMappedList) {
          ...
      }
}

现在,映射到实体方法的实现会将键映射到映射列表传递给 mapMyHashMap 方法,但映射结构不会尝试将键映射到任何映射。

您可以在此处找到有关@Context的更多信息。

傅高逸
2023-03-14

可以使用表达式调用任何方法

  MyEntity mapToEntity(MyDTO dto, List<String> list);



 @Mapping(target = "name", expression = "java(mapMyHashMap(map, list))")

或者,如果您不需要配置它,只需在方法中对其进行硬编码并进行过滤即可

 类似资料:
  • 我不熟悉Mapstruct,在特定用例中遇到问题 因此,如果我的来源属性hotmail.com我的目标属性应该收到“个人”,如果我的来源facebook.com我的目标应该收到“公司”。 我想用表达法,但没法绕过它。我该怎么做?

  • 我得到以下情况: 源类: null

  • 问题内容: 我有一段使用环境变量的Java代码,代码的行为取决于此变量的值。我想用不同的环境变量值测试此代码。如何在JUnit中做到这一点? 我已经大致了解了一些在Java中设置环境变量的方法,但我对它的单元测试方面更感兴趣,尤其是考虑到测试之间不应相互干扰。 问题答案: 库系统Lambda具有设置环境变量的方法。 对于Java 5至7,库系统规则具有一个名为的JUnit规则。 完全公开:我是两个

  • 我有一种情况,在一个DTO中有另一个DTO,我必须映射到它对应的实体。 我正在使用mapstruct,我已经有antherEntityMapper已经存在。 如何更改EntityMapper接口,以便我可以将一个另一个EntityDTO映射到另一个Entity? 谢谢

  • 如果我想使用我自己的Spring启动项目作为对其他Spring启动项目的依赖。但是如果没有组件扫描,我的依赖项Restendpoint不会暴露。如何在添加到依赖项时像执行器一样自动暴露我的依赖项Restendpoint。 鉴于我把我的项目推到本地回购,并添加上述依赖关系 如果没有ComponentScan在依赖项中添加的项目其余endpoint不visible.How自动执行此操作