方法参数

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

响应式类型(Reactor、RxJava或其他)支持需要解决阻塞I/O(例如,读取请求体)的参数。这在“说明”列中标明。对于不需要阻塞的参数,则不应使用响应式类型。

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