java - MapStruct:将 2 个对象映射到第三个对象

标签 java object-object-mapping mapstruct

我有对象 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}.

其中,first_name 和 last_name 将来自 User 对象 Address 对象中的城市和州。

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

但是,目前,我是这样做的

@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() 中手动编写映射。

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

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

最佳答案

您可以使用多个源参数声明一个映射方法,并在您的@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”属性名称在源和目标中匹配,因此无需映射它们。

另见章节 "Defining a mapper"在引用文档中了解更多详细信息。

关于java - MapStruct:将 2 个对象映射到第三个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34130599/

相关文章:

java - SLF4J 按标记过滤日志消息

objective-c - RestKit - "advanced data object"的对象映射问题?

asp.net-mvc - 使用对象-对象映射器是一种好的做法吗?如果是,在哪里使用它?

c# - FullAuditedEntity,对象映射器 : CreatorUserId Null when Creating New Entry or Deleting

java - 如何在 MapStruct 中将相同的 TO 映射到新的相同 TO?

java - 以这种方式使用伴随对象(静态)可能是一个很好的例子吗?

java - Gradle 构建成功但失败

java - MapStruct:从 java.util.Map 到 Bean 的映射?

spring-boot - MapStruct 向 dto 添加一个新的计算字段

java - 蓝色混合 : Java Rest API starter app