此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.1.10Spring中文文档

此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Framework 6.1.10Spring中文文档

Spring WebFlux 与 Spring MVC 类似,是围绕前控制器模式设计的, 其中,中心 , 提供 的共享算法 请求处理,而实际工作由可配置的委托组件执行。 该模型非常灵活,支持多种工作流程。WebHandlerDispatcherHandlerSpring中文文档

DispatcherHandler从 Spring 配置中发现它需要的委托组件。 它还被设计为一个 Spring Bean 本身,并实现用于访问它运行的上下文。如果用 bean 声明 的名称,它又是由 WebHttpHandlerBuilder 发现的, 它把一个请求处理链放在一起,如 WebHandler API 中所述。ApplicationContextAwareDispatcherHandlerwebHandlerSpring中文文档

WebFlux 应用程序中的 Spring 配置通常包含:Spring中文文档

给出的配置是为了构建处理链, 如以下示例所示:WebHttpHandlerBuilderSpring中文文档

ApplicationContext context = ...
HttpHandler handler = WebHttpHandlerBuilder.applicationContext(context).build();
val context: ApplicationContext = ...
val handler = WebHttpHandlerBuilder.applicationContext(context).build()

生成的结果已准备好与服务器适配器一起使用。HttpHandlerSpring中文文档

特殊豆类

委托给特殊 Bean 来处理请求并呈现 适当的回应。我们所说的“特殊 bean”是指 Spring 托管的实例 实现 WebFlux 框架合约。这些通常带有内置合同,但是 您可以自定义其属性、扩展它们或替换它们。DispatcherHandlerObjectSpring中文文档

下表列出了 检测到的特殊 Bean。请注意, 还有一些其他 Bean 在较低级别检测到(请参阅 Web Handler API 中的特殊 Bean 类型)。DispatcherHandlerSpring中文文档

豆类 解释

HandlerMappingSpring中文文档

将请求映射到处理程序。映射是基于一些标准,细节 因实现而异 — 带注释的控制器,简单 URL 模式映射等。HandlerMappingSpring中文文档

主要实现是针对带注释的方法,用于功能端点 路由,以及 URI 路径模式的显式注册 和实例。HandlerMappingRequestMappingHandlerMapping@RequestMappingRouterFunctionMappingSimpleUrlHandlerMappingWebHandlerSpring中文文档

HandlerAdapterSpring中文文档

帮助调用映射到请求的处理程序,而不管 处理程序的实际调用方式。例如,调用带批注的控制器 需要解析批注。a 的主要目的是屏蔽此类细节。DispatcherHandlerHandlerAdapterDispatcherHandlerSpring中文文档

HandlerResultHandlerSpring中文文档

处理处理程序调用的结果并完成响应。 请参阅结果处理Spring中文文档

豆类 解释

HandlerMappingSpring中文文档

将请求映射到处理程序。映射是基于一些标准,细节 因实现而异 — 带注释的控制器,简单 URL 模式映射等。HandlerMappingSpring中文文档

主要实现是针对带注释的方法,用于功能端点 路由,以及 URI 路径模式的显式注册 和实例。HandlerMappingRequestMappingHandlerMapping@RequestMappingRouterFunctionMappingSimpleUrlHandlerMappingWebHandlerSpring中文文档

HandlerAdapterSpring中文文档

帮助调用映射到请求的处理程序,而不管 处理程序的实际调用方式。例如,调用带批注的控制器 需要解析批注。a 的主要目的是屏蔽此类细节。DispatcherHandlerHandlerAdapterDispatcherHandlerSpring中文文档

HandlerResultHandlerSpring中文文档

处理处理程序调用的结果并完成响应。 请参阅结果处理Spring中文文档

WebFlux 配置

应用程序可以声明处理请求所需的基础结构 Bean(列在 Web Handler APIDispatcherHandler 下)。 但是,在大多数情况下,WebFlux Config 是最好的起点。它声明 必需的 bean,并提供更高级别的配置回调 API 来定制它。Spring中文文档

Spring Boot 依靠 WebFlux 配置来配置 Spring WebFlux,并且还提供 许多额外的方便选择。
Spring Boot 依靠 WebFlux 配置来配置 Spring WebFlux,并且还提供 许多额外的方便选择。

加工

DispatcherHandler按如下方式处理请求:Spring中文文档

  • 要求每个处理程序找到一个匹配的处理程序,并使用第一个匹配项。HandlerMappingSpring中文文档

  • 如果找到一个处理程序,则通过适当的 运行该处理程序,该处理程序将通过适当的 将执行的返回值公开为 。HandlerAdapterHandlerResultSpring中文文档

  • 给一个适当的完成 通过直接写入响应或使用视图进行呈现来进行处理。HandlerResultHandlerResultHandlerSpring中文文档

结果处理

通过 包装处理程序调用的返回值 作为 ,以及一些额外的上下文,并传递给第一个声称支持它的人。下表显示了可用的实现,所有这些实现都在 WebFlux Config 中声明:HandlerAdapterHandlerResultHandlerResultHandlerHandlerResultHandlerSpring中文文档

结果处理程序类型 返回值 默认顺序

ResponseEntityResultHandlerSpring中文文档

ResponseEntity,通常来自实例。@ControllerSpring中文文档

0Spring中文文档

ServerResponseResultHandlerSpring中文文档

ServerResponse,通常来自功能终结点。Spring中文文档

0Spring中文文档

ResponseBodyResultHandlerSpring中文文档

处理方法或类的返回值。@ResponseBody@RestControllerSpring中文文档

100Spring中文文档

ViewResolutionResultHandlerSpring中文文档

CharSequence视图模型渲染、 或任何其他属性都被视为模型属性。MapObjectSpring中文文档

另请参阅视图分辨率Spring中文文档

Integer.MAX_VALUESpring中文文档

结果处理程序类型 返回值 默认顺序

ResponseEntityResultHandlerSpring中文文档

ResponseEntity,通常来自实例。@ControllerSpring中文文档

0Spring中文文档

ServerResponseResultHandlerSpring中文文档

ServerResponse,通常来自功能终结点。Spring中文文档

0Spring中文文档

ResponseBodyResultHandlerSpring中文文档

处理方法或类的返回值。@ResponseBody@RestControllerSpring中文文档

100Spring中文文档

ViewResolutionResultHandlerSpring中文文档

CharSequence视图模型渲染、 或任何其他属性都被视为模型属性。MapObjectSpring中文文档

另请参阅视图分辨率Spring中文文档

Integer.MAX_VALUESpring中文文档

异常

HandlerAdapter实现可以处理调用请求的内部异常 处理程序,例如控制器方法。但是,如果请求 Handler 返回一个异步值。Spring中文文档

A 可以将其异常处理机制公开为返回的集合。设置后,也会将其应用于结果的处理。HandlerAdapterDispatchExceptionHandlerHandlerResultDispatcherHandlerSpring中文文档

A 也可以选择实现 .在这种情况下,将它应用于在映射处理程序之前出现的异常, 例如,在处理程序映射期间,或更早,例如在 .HandlerAdapterDispatchExceptionHandlerDispatcherHandlerWebFilterSpring中文文档

另请参阅“带注释的控制器”部分中的“异常”或“WebHandler API”部分中的“异常”。Spring中文文档

查看分辨率

视图分辨率允许渲染到具有 HTML 模板和模型的浏览器,而没有 将您绑定到特定的视图技术。在 Spring WebFlux 中,视图分辨率为 通过专用的 HandlerResultHandler 提供支持,该 HandlerResultHandler 使用实例将 String(表示逻辑视图名称)映射到实例。然后,使用 来呈现响应。ViewResolverViewViewSpring中文文档

处理

传入包含返回值 从处理程序和包含请求期间添加的属性的模型 处理。返回值将按以下方式之一进行处理:HandlerResultViewResolutionResultHandlerSpring中文文档

  • String, : 要解析为 through 的逻辑视图名称 已配置的实现列表。CharSequenceViewViewResolverSpring中文文档

  • void:根据请求路径选择默认视图名称,减去前导和 尾部斜杠,并将其解析为 .当视图名称时,也会发生同样的情况 未提供(例如,返回 model 属性)或异步返回值 (例如,已完成的空)。ViewMonoSpring中文文档

  • 渲染:API 查看解决方案。探索 IDE 中代码完成的选项。Spring中文文档

  • Model, :要添加到请求模型中的额外模型属性。MapSpring中文文档

  • 任何其他:任何其他返回值(简单类型除外,由 BeanUtils#isSimpleProperty 确定) 被视为要添加到模型中的模型属性。属性名称是派生的 从类名中通过约定, 除非存在处理程序方法注释。@ModelAttributeSpring中文文档

该模型可以包含异步、反应式类型(例如,来自 Reactor 或 RxJava)。事先 到渲染,将此类模型属性解析为具体值 并更新模型。单值反应式类型被解析为单个 value 或 no value(如果为空),而多值反应式类型(例如,) 为 收集并解析为 .AbstractViewFlux<T>List<T>Spring中文文档

配置视图分辨率就像添加 Bean 一样简单 到您的 Spring 配置。WebFlux Config 提供了一个 用于视图解析的专用配置 API。ViewResolutionResultHandlerSpring中文文档

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

重 定向

视图名称中的特殊前缀允许您执行重定向。(和子类)将此识别为一条指令,即 需要重定向。视图名称的其余部分是重定向 URL。redirect:UrlBasedViewResolverSpring中文文档

净效果与控制器返回 a 或 相同,但现在控制器本身可以 根据逻辑视图名称进行操作。视图名称(如 )是相对于当前应用程序的,而视图名称(如重定向到绝对 URL)。RedirectViewRendering.redirectTo("abc").build()redirect:/some/resourceredirect:https://example.com/arbitrary/pathSpring中文文档

内容协商

ViewResolutionResultHandler支持内容协商。它比较请求 媒体类型与每个选定的媒体类型支持的媒体类型。使用支持所请求媒体类型的第一种。ViewViewSpring中文文档

为了支持 JSON 和 XML 等媒体类型,Spring WebFlux 提供了 ,这是一种通过 HttpMessageWriter 呈现的特殊内容。通常,您会将这些配置为默认值 通过 WebFlux 配置查看。默认视图为 如果它们与请求的媒体类型匹配,则始终选择并使用它们。HttpMessageWriterViewViewSpring中文文档