对于最新的稳定版本,请使用 Spring Framework 6.2.0spring-doc.cadn.net.cn

DispatcherHandler

Spring WebFlux 与 Spring MVC 类似,是围绕前端控制器模式设计的, 其中中央WebHandlerDispatcherHandler为 请求处理,而实际工作由可配置的委托组件执行。 此模型非常灵活,并支持多种工作流。spring-doc.cadn.net.cn

DispatcherHandler从 Spring 配置中发现它需要的 delegate 组件。 它本身也被设计为 Spring Bean 并实现ApplicationContextAware以访问运行它的上下文。如果DispatcherHandler使用 Bean 声明 名称webHandler,它又被WebHttpHandlerBuilder, 它把一个请求处理链放在一起,如WebHandler应用程序接口.spring-doc.cadn.net.cn

WebFlux 应用程序中的 Spring 配置通常包含:spring-doc.cadn.net.cn

该配置被赋予WebHttpHandlerBuilder构建处理链, 如下例所示:spring-doc.cadn.net.cn

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

结果HttpHandler已准备好与服务器适配器一起使用。spring-doc.cadn.net.cn

特殊 Bean 类型

DispatcherHandler委托给特殊 bean 来处理请求并呈现 适当的回应。我们所说的 “特殊 bean” 是指 Spring 管理的Object实例 实现 WebFlux 框架 Contract。这些通常带有内置合约,但 您可以自定义、扩展或替换其属性。spring-doc.cadn.net.cn

下表列出了DispatcherHandler.请注意, 还有一些其他 bean 在较低级别检测到(参见 Web 处理程序 API 中的特殊 bean 类型)。spring-doc.cadn.net.cn

Bean 类型 解释

HandlerMappingspring-doc.cadn.net.cn

将请求映射到处理程序。映射基于一些标准,详细信息 变化HandlerMappingimplementation — 带注释的控制器,简单 URL 模式映射等。spring-doc.cadn.net.cn

主要的HandlerMappingimplementations 包括RequestMappingHandlerMapping@RequestMapping带注释的方法,RouterFunctionMapping用于功能端点 routes 和SimpleUrlHandlerMapping用于 URI 路径模式的显式注册 和WebHandler实例。spring-doc.cadn.net.cn

HandlerAdapterspring-doc.cadn.net.cn

帮助DispatcherHandler调用映射到请求的处理程序,而不管 处理程序的实际调用方式。例如,调用带注释的控制器 需要解析注释。a 的主要用途HandlerAdapter是为了屏蔽DispatcherHandler从这些细节中。spring-doc.cadn.net.cn

HandlerResultHandlerspring-doc.cadn.net.cn

处理处理程序调用的结果并完成响应。 请参阅 结果处理spring-doc.cadn.net.cn

WebFlux 配置

应用程序可以声明基础结构 bean(列在 Web 处理程序 APIDispatcherHandler),这些请求是处理请求所需的。 但是,在大多数情况下,WebFlux Config 是最好的起点。它声明 所需的 bean,并提供更高级别的配置回调 API 来自定义它。spring-doc.cadn.net.cn

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

加工

DispatcherHandler按如下方式处理请求:spring-doc.cadn.net.cn

  • HandlerMapping要求查找匹配的处理程序,并使用第一个匹配项。spring-doc.cadn.net.cn

  • 如果找到处理程序,则会通过适当的HandlerAdapter哪 将执行的返回值公开为HandlerResult.spring-doc.cadn.net.cn

  • HandlerResult被赋予适当的HandlerResultHandler完成 通过直接写入响应或使用 View 进行渲染来进行处理。spring-doc.cadn.net.cn

结果处理

调用处理程序的返回值,通过HandlerAdapter,被包裹 作为HandlerResult,以及一些额外的上下文,并传递给第一个HandlerResultHandler声称支持它。下表显示了可用的HandlerResultHandler实现,所有这些都在 WebFlux Config 中声明:spring-doc.cadn.net.cn

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

ResponseEntityResultHandlerspring-doc.cadn.net.cn

ResponseEntity,通常来自@Controller实例。spring-doc.cadn.net.cn

0spring-doc.cadn.net.cn

ServerResponseResultHandlerspring-doc.cadn.net.cn

ServerResponse,通常来自功能端点。spring-doc.cadn.net.cn

0spring-doc.cadn.net.cn

ResponseBodyResultHandlerspring-doc.cadn.net.cn

处理返回值@ResponseBodymethods 或@RestController类。spring-doc.cadn.net.cn

100spring-doc.cadn.net.cn

ViewResolutionResultHandlerspring-doc.cadn.net.cn

CharSequence,View模型Map渲染、 或任何其他Object被视为 model 属性。spring-doc.cadn.net.cn

另请参阅 View Resolutionspring-doc.cadn.net.cn

Integer.MAX_VALUEspring-doc.cadn.net.cn

异常

HandlerAdapter实现可以在内部处理调用请求的异常 处理程序,例如 Controller 方法。但是,如果请求 handler 返回一个异步值。spring-doc.cadn.net.cn

一个HandlerAdapter可以将其异常处理机制公开为DispatchExceptionHandlerset 在HandlerResult它返回。设置完成后,DispatcherHandler也会将其应用于结果的处理。spring-doc.cadn.net.cn

一个HandlerAdapter也可以选择实现DispatchExceptionHandler.在那种情况下DispatcherHandler将它应用于在映射处理程序之前出现的异常, 例如,在处理程序映射期间,或更早的时候,例如在WebFilter.spring-doc.cadn.net.cn

另请参阅“带注释的控制器”部分中的异常或 WebHandler API 部分中的异常spring-doc.cadn.net.cn

View 分辨率

视图分辨率允许使用 HTML 模板和模型呈现到浏览器,而无需 将您与特定的 View 技术联系起来。在 Spring WebFlux 中,视图分辨率为 通过专用的 HandlerResultHandler 提供支持,该 HandlerResultHandler 使用ViewResolver实例将 String (表示逻辑视图名称) 映射到View实例。这View然后用于呈现响应。spring-doc.cadn.net.cn

处理

HandlerResult传递到ViewResolutionResultHandler包含返回值 从处理程序和包含请求期间添加的属性的模型 处理。返回值将作为以下值之一进行处理:spring-doc.cadn.net.cn

  • String,CharSequence:要解析为View通过 已配置列表ViewResolver实现。spring-doc.cadn.net.cn

  • void:根据请求路径选择默认视图名称,减去前导和 尾部斜杠,并将其解析为View.当视图名称 未提供(例如,返回 model 属性)或异步返回值 (例如,Monocompleted empty)。spring-doc.cadn.net.cn

  • 渲染:API for 查看解决方案。探索 IDE 中的代码完成选项。spring-doc.cadn.net.cn

  • Model,Map:要添加到请求的模型的额外模型属性。spring-doc.cadn.net.cn

  • 任何其他:任何其他返回值(简单类型除外,由 BeanUtils#isSimpleProperty 确定) 被视为要添加到模型的 model 属性。属性名称是派生的 从类名中通过使用约定, 除非 Handler 方法@ModelAttribute注释存在。spring-doc.cadn.net.cn

该模型可以包含异步的反应式类型(例如,来自 Reactor 或 RxJava)。事先 到 rendering,AbstractView将此类模型属性解析为具体值 并更新模型。单值响应式类型被解析为单个 value 或no value(如果为空),而多值响应式类型(例如Flux<T>) 是 收集并解析为List<T>.spring-doc.cadn.net.cn

要配置视图分辨率,只需添加ViewResolutionResultHandler豆 添加到您的 Spring 配置中。WebFlux Config 提供了一个 用于视图解析的专用配置 API。spring-doc.cadn.net.cn

有关与 Spring WebFlux 集成的视图技术的更多信息,请参见View Technologiesspring-doc.cadn.net.cn

重 定向

特别的redirect:prefix 允许您执行重定向。这UrlBasedViewResolver(和子类)将此视为一条指令, redirect 是必需的。视图名称的其余部分是重定向 URL。spring-doc.cadn.net.cn

实际效果与控制器返回RedirectViewRendering.redirectTo("abc").build(),但现在控制器本身可以 根据逻辑视图名称进行作。视图名称(如redirect:/some/resource是相对于当前应用程序而言的,而视图名称(如redirect:https://example.com/arbitrary/path重定向到绝对 URL。spring-doc.cadn.net.cn

内容协商

ViewResolutionResultHandler支持内容协商。它比较请求 媒体类型,以及每个选定的媒体类型View.第一个View,该 API 的 IP 地址。spring-doc.cadn.net.cn

为了支持 JSON 和 XML 等媒体类型,Spring WebFlux 提供了HttpMessageWriterView,这是一个特殊的View它通过 HttpMessageWriter 呈现。通常,您会将这些配置为默认 视图默认视图为 如果它们与请求的媒体类型匹配,则始终选中并使用。spring-doc.cadn.net.cn


APP信息