方法参数

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

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

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

控制器方法参数 描述

ServerWebExchange

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

ServerHttpRequestServerHttpResponse

访问 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 模式

@MatrixVariable

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

@RequestParam

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

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

@RequestHeader

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

@CookieValue

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

@RequestBody

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

HttpEntity<B>

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

@RequestPart

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

java.util.Maporg.springframework.ui.Model

用于访问 HTML 控制器中使用的 Model,该 Model 在视图渲染时暴露给模板。

@ModelAttribute

用于访问 Model 中现有属性(如果不存在则实例化),并应用数据绑定和验证。参见@ModelAttribute,以及ModelDataBinder

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

ErrorsBindingResult

用于访问命令对象(即 @ModelAttribute 参数)的验证和数据绑定错误。ErrorsBindingResult 参数必须紧接在被验证的方法参数之后声明。

SessionStatus + 类级别 @SessionAttributes

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

UriComponentsBuilder

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

@SessionAttribute

用于访问任何会话属性——与因类级别 @SessionAttributes 声明而存储在会话中的模型属性不同。更多详情参见@SessionAttribute

@RequestAttribute

用于访问请求属性。更多详情参见@RequestAttribute

任何其他参数

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