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

MapStruct:对象属性的条件映射

邓开济
2023-03-14
StudentBean{
String id;
int marks;
}
StudentDTO{
String id;
int marks;
}

映射器类如下所示:

@Mapper
Interface studentMapper{
@mapping(target="id", source="id")// apply condition 1
@mapping(target="marks", source="marks")// apply condition 2
StudentDTO toDTO(StudentBean);
}

How to achieve this with mapstruct?

共有1个答案

都超英
2023-03-14

根据您描述的条件,我假设您希望将源StudentBean映射到现有的StudentDTO目标,否则,您的第一个条件将没有意义。您可以在这里从Mapstruct文档中阅读更多关于映射到现有bean的信息。

条件2可以通过在@mapping注释上设置NullValuePropertyMappingStrategy=NullValuePropertyMappingStrategy.ignore轻松实现。如果源的propeties为null,此设置将允许Mapstruct忽略映射。

您的条件1有点棘手,但是可以通过1.5.0.beta1发行版中最新的特性条件映射来实现。请注意,这个功能目前只在测试版中可用。

映射器的设置和编写如下所示:

pom.xml

<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct</artifactId>
    <version>1.5.0.Beta1</version>
</dependency>

映射器

@Mapper
Interface studentMapper{
    @Mapping(conditionExpression = "java(studentDTO.getId() == null)", target="id", source="id", nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
    @Mapping(target="marks", source="marks", nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
    StudentDTO toExistingStudentDTO(StudentBean studentBean, @MappingTarget StudentDTO studentDTO);
}
 类似资料:
  • 我使用Mapstruct(1.2.0.final)来映射dto对象,我希望将对象的属性提取到它自己的对象实例。 如何做到这一点?或者有没有更方便的方法来去掉只有一个属性的(无用的)对象? 提前谢了。

  • 根据Mapstruct文档,通过为被引用的对象(对象B)定义映射方法,可以将一个对象(对象A)映射到D,该对象包含另一个对象(对象B)。但是如果我只需要映射那个对象(对象B)的属性而不是整个对象呢? 但是如何用Java和MapStruct来实现呢?

  • 我正在使用DTO对象从spring rest控制器中的@RequestBody中检索信息,并在json响应中使用相同的DTO对象。我想完全隐藏一些字段不让响应。 我尝试了,它为未映射的属性返回null,但我的问题是: null FieldBonlyOrderToOrderToMapper 将返回一个OrderDto对象,该对象没有名为(otherFiledA)的字段

  • 假设我有这样的映射: 现在,我需要将子列表映射到子列表,但它们都有相同的父对象。我希望这样做: 但不管用,有机会做吗?

  • 问题内容: 我有一堂课; 我还有一节课; 我将如何搜索Student ,名字John,lastName Doe? 如果是出生日期属性,我将在日期上创建一个并添加一个相等限制()。我将如何对AppUser对象中的lastName和firstName进行操作? 问题答案: 查询: 要使用条件,请检查此线程 还可以从hibernate文档中查看此页面

  • 我创建映射如下所示。如何将平面dto对象属性(街道、城市等)映射到域对象中的嵌套地址。当我试着去做的时候,我发现了一个错误: [错误]诊断:返回类型中的属性“Address.PostalCode”未知。@Mapping(来源=“City”,目标=“Address.City”), 还有类...