java - 如何从具有对象列表和一个对象列表的模型实体映射到具有 Mapstruct 的单个域实体
问题描述
如何使用MapStruct创建一个映射器,该映射器从包含一个对象列表和一个对象列表的模型实体映射到域实体,仅包含嵌套对象列表。
我的模型实体列表对象 = SourceObject-A;
我的模型实体第二个对象 = SourceObject-B;
我的域实体列表对象 = TargetObject-AB;
我的源类如下所示:
源对象-A:
@NoArgsConstructor
@AllArgsConstructor
@Data
public class User {
private int id;
private String name;
}
源对象-B:
@NoArgsConstructor
@AllArgsConstructor
@Data
public class CountryDetails {
private String country;
private String countryCode;
}
所以我需要把它转换成这个(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"
}
]
有什么办法可以得到上面的输出,请帮助我。
解决方案
你可以在你的映射器中做这样的事情:
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
使用流中。
推荐阅读
- java - 密码生成器(如何向该程序添加构造函数)
- mongodb - MongoDB - 如何使用另一个集合中的字段将字段添加到一个集合中的嵌套对象?
- java - 遍历具有重复值的 Map 并识别共享这些值的键
- function - 如何使用带有 IO 读取 Int 的绑定重写“do”块?
- swift - 如何将字符串转换为包含 ? 在 Swift 4.2 的字符串中
- javascript - 从 this.props.location.state 派生时无法编辑文本框中的内容
- c# - 如何创建包含前缀但没有包装器的 XElement?
- excel - Vba Excel使用用户窗体从表中删除一行
- python - python中RGB通道上的ICA
- elasticsearch - 在 Node Stats Api 中,滚动参数表示什么?