如何将 ModelAndView Spring MVC 转换为 Spring Webflux

Posted

技术标签:

【中文标题】如何将 ModelAndView Spring MVC 转换为 Spring Webflux【英文标题】:How to convert ModelAndView Spring MVC to spring Webflux 【发布时间】:2022-01-22 18:45:24 【问题描述】:

如何将以下 Spring MVC 代码转换为 spring webflux?

@GetMapping(path = "/connect")
@ResponseStatus(HttpStatus.FOUND)
public ModelAndView connect() 
  
    String oauthUrl = "https://google.com";
    RedirectView redirect = new RedirectView(oauthUrl);
    redirect.setExpandUriTemplateVariables(false);
    return new ModelAndView(redirect);
  
    

【问题讨论】:

Webflux 不适用于返回模型和视图的 MVC。仅适用于单独返回模型数据。 【参考方案1】:

您可以为此使用Rendering。

@Controller
@RequestMapping("/redirect")
public class RedirectController 

    @GetMapping
    public Mono<Rendering> redirect() 
        return Mono.just(Rendering.redirectTo("https://www.google.com").build());
    


【讨论】:

它不起作用,我得到响应正文 和标题 Content-Type: application/json 您在控制器类上使用@Controller 注释吗?查看我更新的示例代码,这可以在我的本地演示中找到。 仍然不行,同样的响应,我可以调试并看到断点处的停止。我正在使用@RestController 需要渲染的时候应该使用@Controller。顾名思义,@RestController 用于 REST 端点,因此需要 application/json 内容类型。【参考方案2】:
@RestController

public class TestController 


        @GetMapping(path = "/redirect")
    public Mono<ResponseEntity> redirect() 
        return Mono.just(ResponseEntity
                .status(HttpStatus.TEMPORARY_REDIRECT)
                .header("Location", "https://google.com?param=ABCD")
                .build());
    

或者.header(...)可以替换为.location(new URI(...))

【讨论】:

以上是关于如何将 ModelAndView Spring MVC 转换为 Spring Webflux的主要内容,如果未能解决你的问题,请参考以下文章

如何在 spring 控制器部分更改 modelandview 的视图内容?

什么时候在 Spring 中使用 ModelAndView 和 Model?

ModelAndView没有将模型返回到spring mvc中的JSP

Spring MVC 中返回 ModelAndView 和返回 String 有啥区别?

springMVC Model ModelMap 和 ModelAndView的区别

springMVC ModelAndView 作用与功能解析 转