Method Arguments

下表显示所支持的控制器方法参数。

在需要阻塞 I/O(例如读取请求主体)才能解析的参数上支持响应类型(Reactor、RxJava、or other)。这会在描述列中进行标记。在不需要阻塞的参数上不预期有响应类型。

JDK 1.8 的 java.util.Optional 支持作为方法参数,并与具有 required 属性的注释(例如,@RequestParam@RequestHeader 和其他)结合使用,并且等效于 required=false

Controller method argument Description

ServerWebExchange

访问完整的 ServerWebExchange - HTTP 请求和响应、请求和会话属性、checkNotModified 方法等。

ServerHttpRequest, ServerHttpResponse

访问 HTTP 请求或响应。

WebSession

访问会话。只有在添加属性时才会强制启动新会话。支持响应类型。

java.security.Principal

当前经过身份验证的用户 - 如果已知,可能是特定的 Principal 实现类。支持响应类型。

org.springframework.http.HttpMethod

请求的 HTTP 方法。

java.util.Locale

当前请求语言环境,由最具体的 LocaleResolver 决定 - 实际上,配置了 LocaleResolver/LocaleContextResolver

java.util.TimeZone + java.time.ZoneId

当前请求相关联的时区,由 LocaleContextResolver 确定。

@PathVariable

如需访问 URI 模板变量。请参见 URI Patterns

@MatrixVariable

如需访问 URI 路径片段中的名称-值对。请参见 Matrix Variables

@RequestParam

如需访问查询参数。参数值已转换为声明的方法参数类型。请参见 @RequestParam。请注意,使用“@RequestParam”是可选的,例如为了设置其属性。请参见本表稍后的“任何其他参数”。

@RequestHeader

可以访问请求头。将头值转换为已声明的方法参数类型。参见 xref:web/webflux/controller/ann-methods/requestheader.adoc[@RequestHeader

@CookieValue

可以访问 Cookie。将 Cookie 值转换为已声明的方法参数类型。参见 xref:web/webflux/controller/ann-methods/cookievalue.adoc[@CookieValue

@RequestBody

可以访问 HTTP 请求正文。主体内容通过使用 HttpMessageReader 实例转换为已声明的方法参数类型。支持响应式类型。参见 xref:web/webflux/controller/ann-methods/requestbody.adoc[@RequestBody

HttpEntity<B>

可以访问请求头和正文。正文通过 HttpMessageReader 的实例进行转换。支持响应式类型。参见 xref:web/webflux/controller/ann-methods/httpentity.adoc[HttpEntity

@RequestPart

如需访问 multipart/form-data 请求中的某个部分。支持反应式类型。参见 Multipart ContentMultipart Data

java.util.Map or org.springframework.ui.Model

可以访问 HTML 控制器中使用的模型,在视图呈现中以视图的一部分形式展示给模板。

@ModelAttribute

可以访问模型中某个现有属性(如果不存在,则实例化),并将数据绑定和验证应用到该属性上。参见 xref:web/webflux/controller/ann-methods/modelattrib-method-args.adoc[@ModelAttribute 以及 xref:web/webflux/controller/ann-modelattrib-methods.adoc[Model 和 xref:web/webflux/controller/ann-initbinder.adoc[DataBinder。请注意,使用 @ModelAttribute 是可选的,例如,可以设置其属性。有关详细信息,请参阅本表后面的“任何其他参数”。

Errors or BindingResult

可以访问命令对象,即 @ModelAttribute 参数的验证和数据绑定的错误。就在经过验证的方法参数之后,必须声明一个 ErrorsBindingResult 参数。

SessionStatus + class-level @SessionAttributes

以标记表单处理完成,这会触发通过类级别 @SessionAttributes 注释声明的会话属性的清理。有关详细信息,请参阅 xref:web/webflux/controller/ann-methods/sessionattributes.adoc[@SessionAttributes

UriComponentsBuilder

如需准备一个 URL,使其与当前请求的主机、端口、方案和上下文路径相关联。请参见 URI Links

@SessionAttribute

可以访问任何会话属性,这与由于类级别 @SessionAttributes 声明而存储在会话中的模型属性不同。有关详细信息,请参阅 xref:web/webflux/controller/ann-methods/sessionattribute.adoc[@SessionAttribute

@RequestAttribute

可以访问请求属性。有关详细信息,请参阅 xref:web/webflux/controller/ann-methods/requestattrib.adoc[@RequestAttribute

Any other argument

如果某个方法参数与上述任何参数都不匹配,则如果它是简单类型(由 BeanUtils#isSimpleProperty 确定),则默认情况下会将其解析为 @RequestParam;否则,会将其解析为 @ModelAttribute