|
对于最新稳定版本,请使用Spring Framework 7.0.1! |
调度员处理员
Spring WebFlux 与 Spring MVC 类似,围绕前端控制器图案设计,
其中WebHandler这调度员处理员,提供了一个共享算法
请求处理,而实际工作由可配置的委托组件执行。
该模式灵活,支持多样化的工作流程。
调度员处理员从 Spring 配置中发现所需的代理组件。
它本身也被设计成春季豆和工具应用上下文感知以便访问其运行的上下文。如果调度员处理员用豆子宣告
名称webHandler,它又被发现为WebHttpHandlerBuilder,
该链构建了请求处理链,如以下所述WebHandler应用程序接口.
WebFlux应用中的Spring配置通常包括:
-
调度员处理员以豆氏命名webHandler -
WebFilter和WebExceptionHandler豆 -
别人
配置为WebHttpHandlerBuilder为了构建加工链,
如下示例所示:
-
Java
-
Kotlin
ApplicationContext context = ...
HttpHandler handler = WebHttpHandlerBuilder.applicationContext(context).build();
val context: ApplicationContext = ...
val handler = WebHttpHandlerBuilder.applicationContext(context).build()
结果HttpHandler已准备好与服务器适配器一起使用。
特殊Beans
这调度员处理员代理到特殊 BEANS 以处理请求并渲染
合适的回应。这里说的“特别豆子”,是指春季管理的对象实例
实现WebFlux框架合同。这些通常会附带内置合同,但
你可以自定义它们的属性,扩展它们,或者替换它们。
下表列出了通过调度员处理员.注意
还有一些在较低层级检测到的其他豆子(参见Web Handler API中的特殊Beans)。
| Beans类型 | 解释 |
|---|---|
|
将请求映射给一个操作员。映射基于一些标准,具体细节
变化为 主要 |
|
帮帮 |
|
处理器调用的结果并最终确定响应。 参见结果处理。 |
WebFlux 配置
应用程序可以声明基础设施豆(列在Web Handler API和调度员处理员这些文件是处理请求所必需的。
不过,在大多数情况下,WebFlux配置是最好的起点。它宣告
需要 BEANS,并提供了更高级的配置回调 API 来进行自定义。
| Spring Boot 依赖 WebFlux 配置来配置 Spring WebFlux,并且还提供以下 还有许多更方便的选择。 |
加工
调度员处理员请求处理方式如下:
-
每
处理器映射被要求找到匹配的处理者,并使用第一个匹配。 -
如果找到处理程序,则通过相应程序执行
处理适配器哪 释放执行的返回值为处理结果. -
这
处理结果赋予了适当的HandlerResultHandler完成 处理方式是直接写入响应,或使用视图渲染。
结果处理
调用处理程序时的返回值,通过处理适配器,是包裹的
作为处理结果并附带一些额外的背景,并传给了第一位HandlerResultHandler它声称支持它。下表显示了可用的HandlerResultHandler实现,所有实现均在 WebFlux 配置中声明:
| 结果处理类型 | 回报值 | 默认顺序 |
|---|---|---|
|
|
0 |
|
|
0 |
|
处理返回值 |
100 |
|
另见“查看分辨率”。 |
|
异常
处理适配器实现可以内部处理调用请求时的异常
处理程序,比如控制器方法。然而,如果请求成立,例外情况可以被推迟
处理器返回异步值。
一个处理适配器可能将其异常处理机制暴露为DispatchExceptionHandler设定在处理结果它会回来。当那个设定定了,调度员处理员也会应用到结果处理上。
一个处理适配器也可以选择实现DispatchExceptionHandler. 那种情况下调度员处理员将将其应用于处理程序映射前出现的异常,例如在处理程序映射过程中,或更早情况下,例如在WebFilter.
查看分辨率
视图分辨率允许在浏览器中渲染到带有HTML模板和模型的浏览器,而无需绑定于特定的视图技术。在Spring WebFlux中,视图分辨率是通过专用的HandlerResultHandler支持的,该处理器使用ViewResolver实例,将一个字符串(表示逻辑视图名称)映射到视图实例。 这视图然后用来渲染响应。
处理
这处理结果通过了视图分辨率结果处理包含来自处理器的返回值以及包含请求过程中添加属性的模型 处理。 返回值处理方式如下:
-
字符串,字符序列:一个逻辑视图名称,需解析为视图通过 配置列表ViewResolver实现。 -
无效:根据请求路径选择一个默认视图名称,去掉前置和尾部斜杠,并解析为视图. 当视图名称未被提供(例如,返回模型属性)或异步返回值时,也会发生同样的情况(例如,单空的)。 -
渲染:API 用于查看解析场景。在你的IDE中探索代码补全的选项。
-
型,地图:为请求添加额外的模型属性。 -
任何其他:任何其他返回值(简单类型除外,由 BeanUtils#isSimpleProperty 确定)被视为需要添加到模型中的模型属性。属性名称是通过使用约定从类名中推导出来的,除非是处理程序方法。
@ModelAttribute注释存在。
该模型可以包含异步、响应式类型(例如来自 Reactor 或 RxJava)。 事先 渲染,摘要视图将这些模型属性解析为具体值并更新模型。单值反应类型被解析为单一值或无值(如果为空),而多值反应类型(例如,Flux<T>)被收集并确定为List<T>.
配置视图分辨率只需添加一个视图分辨率结果处理豆 对您的 Spring 配置。WebFlux 配置提供了一个专用的视图解析配置 API。
有关与 Spring WebFlux 集成的视图技术,请参见“视图技术”。
重 定向
特别节目重定向:视图名称中的前缀允许你执行重定向。 这UrlBasedViewResolver(及子类)识别此为需要重定向的指令。视图名称的其余部分是重定向URL。
其净效应与控制器返回重定向视图或Rendering.redirectTo(“abc”).build(),但现在控制器本身可以以逻辑视图名称的方式作。视图名称如下重定向:/some/resource相对于当前应用,而视图名称如重定向:https://example.com/arbitrary/path重定向到绝对网址。
内容协商
视图分辨率结果处理支持内容协商。它比较请求媒体类型与每个被选定媒体支持的媒体类型视图. 第一视图支持所请求媒体类型的
为了支持JSON和XML等媒体类型,Spring WebFlux提供了以下支持HttpMessageWriterView,这是一个特殊条件视图通过 HttpMessageWriter 进行渲染。通常,你会将这些配置为默认的视图。默认视图是如果匹配所请求的媒体类型,则始终被选择并使用。