方法参数

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

支持反应式类型(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请求中的部分。支持反应式类型。参见多部分内容多部分数据

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

任何其他参数

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