0

我在我们的应用程序中升级 Spring 版本,该版本早在 Spring 4.3 上,在升级到 Spring 5 时,我们希望更改应用程序的某些部分以使用可用的响应式功能。MVC 和 WebFlux 在应用程序中并排工作,但视图分辨率在 webflux 中不起作用,是否不受支持。

    @RequestMapping(value = "/react/createWithReactive")
    public Mono<String> reactCreateWithReactive(Model map) {
              return Mono.just("createPage");
    }
4

1 回答 1

0

根据官方 spring 文档视图分辨率与 MVC 相同

https://docs.spring.io/spring-framework/docs/5.0.x/spring-framework-reference/web-reactive.html#webflux-viewresolution

1.3.6。在 Spring MVC 中查看分辨率相同

视图分辨率允许使用 HTML 模板和模型渲染到浏览器,而无需将您绑定到特定的视图技术。在 Spring WebFlux 中,通过专用的 HandlerResultHandler 支持视图解析,该处理程序使用 ViewResolver 将表示逻辑视图名称的字符串映射到视图实例。然后使用视图来呈现响应。

在 Spring MVC 中处理相同

传递给 ViewResolutionResultHandler 的 HandlerResult 包含来自处理程序的返回值,以及包含在请求处理期间添加的属性的模型。返回值被处理为下列之一:

String, CharSequence — 要通过配置的 ViewResolver 列表解析为视图的逻辑视图名称。

void — 根据请求路径减去前导和尾随斜杠选择默认视图名称,并将其解析为视图。当未提供视图名称时也会发生同样的情况,例如返回模型属性,或异步返回值,例如 Mono 完成为空。

渲染——视图解析场景的 API;通过代码完成探索 IDE 中的选项。

Model, Map — 为请求添加到模型中的额外模型属性。

任何其他——任何其他返回值(除了简单类型,由 BeanUtils#isSimpleProperty 确定)被视为要添加到模型的模型属性。除非存在处理程序方法 @ModelAttribute 注释,否则属性名称是使用约定从类名称派生的。

该模型可以包含异步、反应类型(例如来自 Reactor、RxJava)。在渲染之前,AbstractView 将这些模型属性解析为具体值并更新模型。单值反应类型被解析为单个值,或者没有值(如果为空),而多值反应类型,例如 Flux 被收集并解析为 List。

配置视图分辨率就像在 Spring 配置中添加 ViewResolutionResultHandler bean 一样简单。WebFlux Config 为视图解析提供了专用的配置 API。

有关与 Spring WebFlux 集成的视图技术的更多信息,请参阅视图技术

于 2018-12-25T18:16:06.940 回答