问题描述
关于问题的情境化:
-
我正在尝试链接来自多个服务的数据,以便聚合/合并它们的响应;
-
我的目标是使用从“合并响应”创建的对象列表创建最终 Flux。
-
合并基于 2 个服务(userService + postService)
- 以下是上述情况的代码:
-
-
代码:
@Slf4j
@Service
@AllArgsConstructor
public class BlogService implements BlogServiceInt {
private final UserServiceInt userService;
private final PostServiceInt postService;
private final CommentServiceInt commentService;
private final modelmapper conv;
@Override
public Flux<UserAllDto> findAllShowAllDto() {
return userService
.findAll()
.flatMap(user -> Flux.fromIterable(List.of(conv.map(user,UserAllDto.class))))
.flatMap(userAllDto -> {
postService
.findPostsByAuthorId(userAllDto.getId())
.map(post -> conv.map(post,PostAllDto.class))
.collectList()
.flatMap(list -> {
if (!list.isEmpty()) userAllDto.setPosts(list);
return Mono.just(userAllDto);
});
return Flux.fromIterable(List.of(userAllDto));
}
);
}
}
问题:
当前有问题的 JsonResponse(邮递员):
[
{
"id": "60b0306f275ea3018b167dde","name": "p","posts": []
},{
"id": "60b03070275ea3018b167ddf","posts": [
{
"id": null,"title": null,"listComments": []
}
]
}
]
更新:
找到解决方案
@Override
public Flux<UserAllDto> findAllShowAllDto() {
return userRepo
.findAll()
.flatMap(user -> {
UserAllDto userDto = mapper.map(user,UserAllDto.class);
final Mono<UserAllDto> userAllDtoMono =
postService
.findPostsByAuthorId(userDto.getId())
.flatMap(post -> {
PostAllDto postDto = mapper.map(post,PostAllDto.class);
final Mono<PostAllDto> postAllDtoMono =
commentService.findCommentsByPostId(postDto.getPostId())
.map(c -> mapper.map(c,CommentAllDto.class))
.collectList()
.flatMap(list -> {
postDto.setListComments(list);
return Mono.just(postDto);});
return postAllDtoMono.flux();})
.collectList()
.flatMap(list -> {
userDto.setPosts(list);
return Mono.just(userDto);
});
return userAllDtoMono.flux();
});
}
解决方案的 JsonResponse(邮递员):
[
{
"id": "60b9284e08a653638c22bd97","name": "bbbbbbbb ","posts": [
{
"postId": "60b929a808a653638c22bd9d","title": "bbbbbbbbbb111111111111","idAuthor": "60b9284e08a653638c22bd97","listComments": [
{
"commentId": "60b92bad08a653638c22bd9e","postId": "60b929a808a653638c22bd9d","idAuthor": "60b9292e08a653638c22bd9b","text": "ccccccccccccccccc 2222"
},{
"commentId": "60b92c1708a653638c22bd9f","idAuthor": "60b9285908a653638c22bd98","text": "aaaaaaaaaaaaaaaaaaaa 2222"
}
]
}
]
},{
"id": "60b9285908a653638c22bd98","name": "aaaaaaa ","posts": [
{
"postId": "60b9287808a653638c22bd99","title": "aaaaaaa1111111111111","listComments": [
{
"commentId": "60b928f408a653638c22bd9a","postId": "60b9287808a653638c22bd99","text": "bbbbbbbbbbbbb 1111"
},{
"commentId": "60b9294a08a653638c22bd9c","text": "ccccccccccccccccc 1111"
}
]
}
]
}
]
非常感谢您的帮助
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)