【问题标题】:how to set redirect using WebFlux如何使用 WebFlux 设置重定向
【发布时间】:2021-08-29 03:56:27
【问题描述】:

在控制器中,我保存了对象。 saveOrUpdateUser 方法返回单声道。但重定向比将对象保存到数据库要快。由于我没有在发生重定向的另一种方法中获取此对象。

@PostMapping("users/{id}")
    public String saveOrUpdateUser(User user, Model model) {
        Mono<User> userDb;
        if (user.getId() == null) {
            userDb = userService.registerUser(user);
        } else {
            userDb = userService.update(user);
        }
      
        userDb.subscribe();
 
   
            return "redirect:/admin/users";
    }

重定向到:

@GetMapping("users")
    public String getAllUser(Model model) {

        Flux<User> all = userService.findAll().sort(Comparator.comparingLong(User::getId));

        IReactiveDataDriverContextVariable reactiveDataDrivenMode =
                new ReactiveDataDriverContextVariable(all, 1,1);
        model.addAttribute("users", reactiveDataDrivenMode);
      
         return "usermainpage";

【问题讨论】:

  • 您是否可以选择在控制器的方法 saveOrUpdateUser 上返回 Mono 而不是 String?如果可以的话,你可以使用 Mono 上的 then 方法。如果不能,可以使用 userDb mono 上的方法块,这将等待执行完成
  • 谢谢。我会尝试“ return userDb.flatMap(u->{ return Mono.just("redirect:/admin/users"); }); "
  • 不客气!测试后告诉我它是否有效
  • 是的,它有效)
  • 你介意我把我的 cmets 作为问题的答案吗?

标签: spring-boot thymeleaf spring-webflux


【解决方案1】:

如果您可以选择将控制器方法 saveOrUpdateUser 的返回类型更改为 Mono,您可以使用 Mono 的 flatMap 方法返回重定向字符串,如:

return userDb.flatMap((data) -> Mono.just("redirect:/admin/users"));

如果你不能改变返回类型,你可以使用mono的block方法等待用户db执行完成。

【讨论】:

    猜你喜欢
    • 2022-09-29
    • 2012-06-17
    • 2018-11-03
    • 2020-08-11
    • 2018-08-09
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 2015-06-12
    相关资源
    最近更新 更多