11

我有对象 1 和对象 2。现在,我想用 1 和 2 的属性映射 object3。

说,我有 2 个对象:

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

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

User_View: {firstName, lastName, 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().

因此,有什么办法可以避免这种情况吗?

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

4

2 回答 2

12

您可以声明具有多个源参数的映射方法,并在@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);
}

由于“城市”和“州”属性名称在源和目标中匹配,因此无需映射它们。

另请参阅参考文档中的“定义映射器”一章以获取更多详细信息。

于 2015-12-07T10:38:32.643 回答
0

使用 MapStruct 您缺少使用 @Mapper 注释的步骤。@Mapper 将创建映射的实现。

您应该在此链接http://mapstruct.org/documentation/stable/reference/html/查看文档

具体来说

  1. 定义映射器

在本节中,您将学习如何使用 MapStruct 定义 bean 映射器以及您必须这样做的选项。3.1 基本映射

要创建映射器,只需使用所需的映射方法定义 Java 接口并使用 org.mapstruct.Mapper 注释对其进行注释:

@Mapper
public interface CarMapper {

    @Mappings({
        @Mapping(source = "make", target = "manufacturer"),
        @Mapping(source = "numberOfSeats", target = "seatCount")
    })
    CarDto carToCarDto(Car car);

    @Mapping(source = "name", target = "fullName")
    PersonDto personToPersonDto(Person person);
}

@Mapper 注释使 MapStruct 代码生成器在构建时创建 CarMapper 接口的实现。

于 2015-12-07T10:07:19.817 回答