如何将 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 有啥区别?