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

时间:2018-04-11 14:25:46

标签: java mapstruct

我有这样的对象:

class User {

 private String firstName;

 private String secondName;

 private int age;

 ....
 get/set methods

}

另一个对象将User作为属性:

class UserHolder {

 private User user;

 ....
 get/set methods

}

我想将UserHolder转换为用户使用MapStruct

当我写这个mapper时,我有类似的东西:

@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 映射到此目标而不用指定目标字段?

2 个答案:

答案 0 :(得分:2)

目前无法做到这一点。已有功能请求#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只是一种推定,它可以是任何对象。

如果您不想公开User toUser(UserDto source),那么您可以创建一个抽象映射器并使该方法受到保护并在那里进行抽象。 MapStruct将能够处理它

答案 1 :(得分:1)

我可能迟到了聚会。但是,以下应该可以正常工作。

sudo journalctl -u zun-api