如何使用 WebFlux 设置重定向

Posted

技术标签:

【中文标题】如何使用 WebFlux 设置重定向【英文标题】:how to set redirect using 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 作为问题的答案吗? 【参考方案1】:

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

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

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

【讨论】:

以上是关于如何使用 WebFlux 设置重定向的主要内容,如果未能解决你的问题,请参考以下文章

如何使用谷歌域为 https 设置根域重定向

使用快递设置cookie后如何重定向url?

如何使用 301 重定向而不是 302 将 HTTP 站点重定向到 HTTPS 站点

如何使用 Azure AD 为应用服务上的 Spring Boot 应用设置重定向 URI

正确登录后如何重定向用户?

kermit - 如何将输出重定向到文件中