【发布时间】:2022-01-22 04:43:24
【问题描述】:
在这里我尝试从数据库中调用并从不同的单声道和通量组合成新的单声道。
public Mono<ListMovieWithKomenDTO> fetchMovieAndKomen(Integer movieId){
Mono<Movie> movie = findById(movieId).subscribeOn(Schedulers.elastic());
Flux<MovieKomen> movieKomen = getKomenByMovieId(movieId).subscribeOn(Schedulers.elastic());
return Mono.zip(movie, movieKomen.collectList(), movieMovieKomenDTOBiFunction);
}
private BiFunction<Movie, List<MovieKomen>, ListMovieWithKomenDTO> movieMovieKomenDTOBiFunction = (x1, x2) -> ListMovieWithKomenDTO.builder()
// .age(x1.getAge())
.id(x1.getId())
.name(x1.getName())
.status(x1.getStatus())
.detail(x1.getDetail())
.url(x1.getUrl())
.movieKomen(x2).build();
在这里,我为标题(如电影)和详细信息(如电影评论)两次调用 db 以将它们分开。在我检索两个不同的数据后,我想加入基于通量数据和单声道的新单声道数据。为了使它们成为一个数据,我使 DTO 将电影表和评论表放在一起,但它失败了。我认为 mono.zip 中的错误是为了将数据放入一个新的单声道中。
这里是调试控制台的错误
java.lang.IllegalArgumentException: Cannot encode parameter of type org.springframework.r2dbc.core.Parameter
at io.r2dbc.postgresql.ExtendedQueryPostgresqlStatement.bind(ExtendedQueryPostgresqlStatement.java:89) ~[r2dbc-postgresql-0.8.10.RELEASE.jar:0.8.10.RELEASE]
谢谢
【问题讨论】:
-
您可以先删除两个
subscribeOn,它们都不需要,如果您需要它们,则只需要一个,因为如文档中所述,subscribeOn 将影响整个链。请阅读说明如何以及何时使用subscribeOn的参考资料 -
当我删除其中一个时它仍然会出错。先生有什么建议吗?谢谢
标签: mono reactive-programming spring-webflux flux webflux