【问题标题】:How to map from Model entity with list of Objects and one more Object to single Domain entity with Mapstruct如何从具有对象列表和另一个对象的模型实体映射到具有 Mapstruct 的单个域实体
【发布时间】:2021-11-28 09:34:15
【问题描述】:

如何使用 MapStruct 创建一个映射器,该映射器从包含一个对象列表和一个对象列表的模型实体映射到域实体,仅包含嵌套对象列表。 p>

我的模型实体列表对象 = SourceObject-A;

我的模型实体第二个对象 = SourceObject-B;

我的域实体列表对象 = TargetObject-AB;

我的源类如下所示:

SourceObject-A:

@NoArgsConstructor
@AllArgsConstructor
@Data
public class User {

  private int id;
  private String name;

  }

SourceObject-B:

@NoArgsConstructor
@AllArgsConstructor
@Data
public class CountryDetails {

    private String country;
    private String countryCode;

}

所以我需要把它转换成this(TargetObject-AB):

@NoArgsConstructor
@AllArgsConstructor
@Data
public class DomainUser {
    private int id;
    private String name;
    private String country;
    private String countryCode;
}

用户控制器:

GetMapping("/users")
public List<DomainUser> getDUsers(List<User> usersList, CountryDetails countryDetails){

     List<DomainUser> domainUsersList=ModelToDomainMapper.INSTANCE.UserToDUser(usersList, 
     countryDetails);


  return domainUsersList;

}

映射器接口:

@Mapper
public interface ModelToDomainMapper {

    ModelToDomainMapper INSTANCE = Mappers.getMapper(ModelToDomainMapper.class)


    List<DomainUser> UserToDUser(List<User> users, CountryDetails countryDetails);


}

预期的样本 json:

来源(输入):

[
        
  "countryDetails":{
        
                 "country"     : "India",
                 "countryCode" : "+91"
           
                  },
  "userslist" :[
        
            {
        
                "id"   : 1,
                "name" : "XXXXXXX"
           
              },
            {
        
               "id"   : 2,
               "name" : "XXXXXXX"
           
             }
        ]
    ]

目标(预期输出):

[
  {
    "id": 1,
    "name": "xxxxxx",
    "country": "India",
    "countryCode": "+91"
  },
  {
    "id": 2,
    "name": "xxxxxx",
    "country": "India",
    "countryCode": "+91"
  }
]

有什么办法可以得到上面的输出,请帮帮我。

【问题讨论】:

  • 据我所知,mapstruct 将一个类转换为另一个类,但不合并它。您可以使用构造函数来创建两个类的联合

标签: java spring-boot mapstruct


【解决方案1】:

你可以在你的映射器中做这样的事情:

    DomainUser UserToDUser(User user, CountryDetails countryDetails);

    default List<DomainUser> UsersToDomainUsers(List<User> users, CountryDetails countryDetails) {
        return users.stream()
                .map((user -> UserToDUser(user, countryDetails)))
                .collect(Collectors.toList());
    }

这将使用 MapStruct 生成的映射器将每个 User 与相同的 CountryDetails 合并以创建 DomainUser 并使用流将它们全部收集到 List 中。

【讨论】:

  • 非常感谢@Marci,它运行良好
猜你喜欢
  • 2019-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-18
相关资源
最近更新 更多