方法参数

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

Reactive 类型(Reactor、RxJava、或其他)在需要阻塞 I/O(例如,读取请求主体)才能解析的参数上受支持。这在“描述”列中标记。在不需要阻塞的参数上,不应使用 Reactive 类型。

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

控制器方法参数 描述

ServerWebExchange

访问完整的 ServerWebExchange — HTTP 请求和响应的容器,请求和会话属性,checkNotModified 方法等。

ServerHttpRequestServerHttpResponse

访问 HTTP 请求或响应。

WebSession

访问会话。这不会强制启动新会话,除非添加了属性。支持 Reactive 类型。

java.security.Principal

当前经过身份验证的用户 — 可能是一个特定的 Principal 实现类(如果已知)。支持 Reactive 类型。

org.springframework.http.HttpMethod

请求的 HTTP 方法。

java.util.Locale

当前请求的区域设置,由最具体的 LocaleResolver 确定,实际上是配置的 LocaleResolver/LocaleContextResolver

java.util.TimeZone + java.time.ZoneId

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

@PathVariable

用于访问 URI 模板变量。请参阅 URI 模式

@MatrixVariable

用于访问 URI 路径段中的名称-值对。请参阅 矩阵变量

@RequestParam

用于访问查询参数。参数值将转换为声明的方法参数类型。请参阅 @RequestParam

请注意,使用 @RequestParam 是可选的,例如,为了设置其属性。请参阅本表后面的“任何其他参数”。

@RequestHeader

用于访问请求头。头值将转换为声明的方法参数类型。请参阅 @RequestHeader

@CookieValue

用于访问 Cookie。Cookie 值将转换为声明的方法参数类型。请参阅 @CookieValue

@RequestBody

用于访问 HTTP 请求主体。主体内容将使用 HttpMessageReader 实例转换为声明的方法参数类型。支持响应式类型。请参阅 @RequestBody

HttpEntity<B>

用于访问请求头和主体。主体将使用 HttpMessageReader 实例进行转换。支持响应式类型。请参阅 HttpEntity

@RequestPart

用于访问 multipart/form-data 请求中的部分。支持响应式类型。请参阅 多部分内容多部分数据

java.util.Maporg.springframework.ui.Modelorg.springframework.ui.ModelMap

用于访问 HTML 控制器中使用的模型,并作为视图渲染的一部分公开给模板。

@ModelAttribute

用于访问模型中已存在的属性(如果不存在则实例化),并应用数据绑定和验证。请参阅 @ModelAttribute 以及 ModelDataBinder

请注意,使用 @ModelAttribute 是可选的,例如,为了设置其属性。请参阅本表后面的“任何其他参数”。

ErrorsBindingResult

要访问来自验证和数据绑定的命令对象的错误,例如 @ModelAttribute 参数。必须在验证的方法参数之后立即声明 ErrorsBindingResult 参数。

SessionStatus + 类级别的 @SessionAttributes

用于标记表单处理完成,这将触发通过类级别的 @SessionAttributes 注释声明的会话属性的清理。有关更多详细信息,请参见 @SessionAttributes

UriComponentsBuilder

用于准备相对于当前请求的主机、端口、方案和上下文路径的 URL。请参见 URI 链接

@SessionAttribute

用于访问任何会话属性,与作为类级别 @SessionAttributes 声明的结果存储在会话中的模型属性形成对比。有关更多详细信息,请参见 @SessionAttribute

@RequestAttribute

用于访问请求属性。有关更多详细信息,请参见 @RequestAttribute

任何其他参数

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