方法参数

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

对于需要阻塞 I/O(例如,读取请求体)才能解析的参数,支持反应式类型(Reactor、RxJava 或 其他)。这在“描述”列中已标明。对于不需要阻塞的参数,不期望使用反应式类型。

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

控制器方法参数 描述

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

@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.Model

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

@ModelAttribute

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

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

ErrorsBindingResult

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

SessionStatus + 类级别 @SessionAttributes

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

UriComponentsBuilder

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

@SessionAttribute

用于访问任何会话属性 —— 与由于类级别 @SessionAttributes 声明而存储在会话中的模型属性不同。请参阅 @SessionAttribute 获取更多详细信息。

@RequestAttribute

用于访问请求属性。请参阅 @RequestAttribute 获取更多详细信息。

任何其他参数

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