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

当目标是内联对象时如何使用Mapstruct?

刘意
2023-03-14
class User {

 private String firstName;

 private String secondName;

 private int age;

 ....
 get/set methods

}
class UserHolder {

 private User user;

 ....
 get/set methods

}
@Mapper(componentModel = "spring")
public interface UserHolderMapper {

 @Mapping(source = "user.firstName", target = "firstName")
 @Mapping(source = "user.secondName", target = "secondName")
 @Mapping(source = "user.age", target = "age")
 User toUser(UserHolder source);

}

但是它包含了很多样板代码(在@Mapping注释中),我怎么能对mapper说我想要将source.user映射到这个目标而不指定target的字段呢?

共有1个答案

方昊英
2023-03-14

这目前是不可能的。已经有一个特性请求#1406,它与您所需要的非常相似。

在任何情况下,作为解决办法,映射器可以如下所示:

@Mapper(componentModel = "spring")
public interface UserHolderMapper {

    default User toUser(UserHolder source) {
        return source == null ? null : toUser(source.getUser());
    }

    User toUser(UserDto source);
}

我不知道userholder中的对象是什么。userdto只是一个假设,它可以是任何对象。

 类似资料:
  • 我对MapStruct是新手。我有一个场景,在我的目标对象中,我有一个带有键值对 的java映射,我必须使用源对象内部的对象属性/数据成员值来填充这个映射。 我的代码类似于bellow(虚拟代码): 我如何像Bellow一样手动实现相同的事情: 任何帮助,任何建议或任何变通方法都是感激的。提前谢了。

  • 考虑下面的javascript代码 有人能解释对象如何在将设置为null之后访问的“foo”属性吗?用于访问属性的内部链接是什么? 我试图通过搜索寻找可能的解释,但找不到JavaScript这种特殊行为的任何解释。

  • 我想映射嵌套的java对象。改为。 期望:当且仅当不为null,则在下创建对象。否则,不要创建任何目标对象。 问题:我在映射器中使用了。但是mapstruct正在检查是否为null,然后创建。在中,为空。我希望在(leaf/last level object)之前进行空检查,然后创建目标对象。 请告诉我该如何做到这一点 下面是我正在使用的映射。 生成的代码位于https://github.com/

  • 问题内容: 用Javascript将是: 但是Python中相同的语法会创建一个字典,那不是我想要的 问题答案: 有两种功能用途。

  • 问题内容: 我是Hibernate和Criteria Query的新手。所以我在HQL中实现了查询: 如何使用hibernate条件对象实现它? 问题答案: 您的示例只是本机SQL,而不是HQL。无论如何,您可以使用Criteria API中的以下方法来构造所需的Criteria对象: 使用setProjection(Projection projection)定义select子句 使用creat

  • 问题内容: 就我的理解而言,finalize()和GC是两个不同的方面。GC使用finalize()方法释放对象内存。我们无法声明何时发生GC(即使我们显式调用System.gc())。但是我们可以在对象上显式调用finalize()。 同样,按照docs,对于任何给定对象,Java虚拟机都不会多次调用finalize方法。 因此,当我们先调用finalize()且GC在以后的时间点发生时,会发生