当前位置:  开发笔记 > 编程语言 > 正文

MapStruct:将2个对象映射到第3个对象

如何解决《MapStruct:将2个对象映射到第3个对象》经验,为你挑选了1个好方法。

我有Object1和Object2.现在,我想映射object3,其中包含1和2的属性.

说,我有2个对象:

1. User: {first_name, last_name, id}
2. Address: {street, locality, city, state, pin, id}

现在,有了这些,我想把它映射到

User_View: {firstName, lastName, city, state}.

其中,first_name和last_name来自User对象,来自Address对象的city&state.

现在,我的问题是,怎么做?

但是,目前,我这样做

@Mapper    
public abstract class UserViewMapper {
        @Mappings({
                    @Mapping(source = "first_name", target = "firstName"),
                    @Mapping(source = "last_name", target = "lastName"),
                    @Mapping(target = "city", ignore = true),
                    @Mapping(target = "state", ignore = true)

            })
            public abstract UserView userToView(User user);

        public UserView addressToView(UserView userView, Address address) {

                if (userView == null) {
                    return null;
                }

                if (address == null) {
                    return null;
                }

                userView.setCity(address.getCity());
                userView.setState(address.getState()); 

            return userView;

            }
    }

但是,在这里,我必须手动编写映射addressToView().

因此,有没有办法避免这种情况?

或者,处理这种情况的首选方法是什么?



1> Gunnar..:

您可以声明具有多个源参数的映射方法,并在@Mapping注释中引用所有这些参数的属性:

@Mapper
public abstract class UserViewMapper {

    @Mapping(source = "first_name", target = "user.firstName"),
    @Mapping(source = "last_name", target = "user.lastName"),
    public abstract UserView userAndAddressToView(User user, Address address);
}

由于"city"和"state"属性名称在源和目标中匹配,因此无需映射它们.

有关更多详细信息,另请参阅参考文档中的"定义映射器"一章.

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有