好吧,所以我有下面的方法,但我试图摆脱使用。块(),因此尝试实现Mono,但得到错误< code >所需的类型:List
原始代码
@GetMapping("/user/{userId}")
public List<CatalogItem> getUserMoviesRating(@PathVariable String userId) {
UserRating ratings = webClientBuilder.build()
.get()
.uri("http://localhost:8083/ratingsdata/users/" + userId)
.retrieve()
.bodyToMono(UserRating.class)
.block();
assert ratings != null;
return ratings.getUserRating().stream().map(rating -> {
Movies movie = webClientBuilder.build()
.get()
.uri("http://localhost:8082/movies/" + rating.getMovieId())
.retrieve()
.bodyToMono(Movies.class)
.block();
assert movie != null;
return new CatalogItem(movie.getName(), movie.getDesc(), rating.getRating());
}).collect(Collectors.toList());
}}
我尝试以非阻塞方式重构使用 Mono
@GetMapping("/user/{userId}")
public List <Mono<CatalogItem>> getUserMoviesRating(@PathVariable String userId) {
Mono<UserRating> ratings = webClientBuilder.build()
.get()
.uri("http://localhost:8083/ratingsdata/users/" + userId)
.retrieve()
.bodyToMono(UserRating.class);
return ratings.map(userRating -> userRating.getUserRating().stream().map(rating -> {
Mono<Movies> movies = webClientBuilder.build()
.get()
.uri("http://localhost:8082/movies/" + rating.getMovieId())
.retrieve()
.bodyToMono(Movies.class);
return movies.map(m -> new CatalogItem(m.getName(), m.getDesc(), rating.getRating()));
}).collect(Collectors.toList()));
}
将 java 8 Stream API 与 Reactor 发布者相结合并不是最佳解决方案,因为这会使代码的可读性降低,并且它们的工作方式不同。你可以看看这里了解更多细节如果userRating.getUserRating()
返回一个评级列表,你可以试试这个代码。
public Mono <List<CatalogItem>> getUserMoviesRating(@PathVariable String userId) {
Mono<UserRating> ratings = webClientBuilder.build()
.get()
.uri("http://localhost:8083/ratingsdata/users/" + userId)
.retrieve()
.bodyToMono(UserRating.class);
return ratings.flatMapMany(userRating -> Flux.fromIterable(userRating.getUserRating()))
.flatMap(rating->this.getMovie(rating.getMovieId()))
.map(m -> new CatalogItem(m.getName(), m.getDesc(), rating.getRating()))
.collectList();
}
private Mono<Movies> getMovie(String movieId){
return webClientBuilder.build()
.get()
.uri("http://localhost:8082/movies/" + movieId)
.retrieve()
.bodyToMono(Movies.class);
}
我想从Flux/Mono中获取对象。我使用 我会这样做: 我有错误: 为什么?有什么不同的方法来获取对象? 在反应式编程中,如何做到:在RequestBody中,您有UserDto。 如果不创建用户,请检查数据库中是否存在电子邮件。
问题内容: 只是试图在视图中显示我通过ajax从控制器获取的数组,但它显示的是[object Object],[object Object]而不是array。请在下面检查我的js文件: 问题答案: 使用转换到。 试试这个: 我认为,这对您有帮助-
我有以下代码: 现在我使我的存储库成为反应性的。我的问题是如何使缓存存储现在单声道和通量。 我遇到了以下Mono和Flux缓存,但这只是为了查找,因为我也是反应式编程的初学者。
问题内容: 我正在一个JavaScript项目上,只是想知道为什么对象实例不继承和其他方法,而不必调用超类(superobject?)方法。 我看过了MDN文档,实际上有“非标准”属性方法。 但这些已被弃用。为什么要转向方法? 在我看来,类似的东西比更好。对于其他一些Object方法,我也会说同样的话。 问题答案: 这是为了避免发生冲突-通常情况下,对象的问题不具有所需值的属性。 JS中的对象通常
问题内容: 我一直在尝试更新一个名为libpynexmo的小型Python库以与Python 3一起使用。 我一直坚持这个功能: 遇到这个问题时,json会回应: 我在一些地方读到,应该为您传递带有附件的对象(在这种情况下为对象),但是它不适用于对象。 我不知道下一步该怎么做,但是由于我的整个1500行脚本是新转换为Python 3的,所以我不想回到2.7。 问题答案: 我最近写了一个小功能来发送
我最近开始使用reactive,并创建了一个使用reactive流的简单应用程序。 我有以下代码,我通过empID获得一名员工。只有当boolean设置为时,我才需要向API提供有关员工的额外详细信息。如果设置为false,我必须在返回employee对象之前将额外的详细信息设置为null。现在我正在使用流上的一个块来实现这一点。有没有可能在没有阻塞的情况下执行此操作,以便我的方法可以返回Mono