方法参数

下表描述了支持的控制器方法参数。任何参数都不支持响应式类型。

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

控制器方法参数 描述

HttpMethod

请求的 HTTP 方法。

java.util.Locale

当前请求的区域设置,由最具体的可用 LocaleResolver 确定(实际上是配置的 LocaleResolverLocaleContextResolver)。

java.util.TimeZone + java.time.ZoneId

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

java.io.InputStream, java.io.Reader

用于访问原始请求体。

java.io.OutputStream, java.io.Writer

用于访问原始响应体。

@PathVariable

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

@MatrixVariable

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

@RequestParam

用于访问请求参数,包括多部分文件。参数值将转换为声明的方法参数类型。 参见 @RequestParam 以及 Multipart

注意,对于简单参数值,使用 @RequestParam 是可选的。 参见本表末尾的“任何其他参数”。

@RequestHeader

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

@CookieValue

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

@RequestBody

用于访问 HTTP 请求体。使用 HttpMessageConverter 实现将正文内容转换为声明的方法参数类型。 参见 @RequestBody

HttpEntity<B>

用于访问请求头和正文。正文使用 HttpMessageConverter 进行转换。 参见 HttpEntity

@RequestPart

用于访问 multipart/form-data 请求中的部分,使用 HttpMessageConverter 转换该部分的正文。 参见 Multipart

java.util.Map, infra.ui.Model, infra.ui.ModelMap

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

RedirectAttributes

指定重定向情况下使用的属性(即附加到查询字符串中)以及在重定向后的请求之前临时存储的 Flash 属性。 参见 重定向属性Flash 属性

@ModelAttribute

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

注意,使用 @ModelAttribute 是可选的(例如,设置其属性)。 参见本表末尾的“任何其他参数”。

Errors, BindingResult

用于访问命令对象(即 @ModelAttribute 参数)的验证和数据绑定错误,或者 @RequestBody@RequestPart 参数的验证错误。 您必须在经过验证的方法参数之后紧接着声明一个 ErrorsBindingResult 参数。

UriComponentsBuilder

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

@SessionAttribute

用于访问任何会话属性。更多详细信息请参阅 @SessionAttribute

@RequestAttribute

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

任何其他参数

如果方法参数与本表前面的任何值都不匹配,并且它是一个简单类型(由 BeanUtils#isSimpleProperty 确定), 它将被解析为 @RequestParam。否则,它将被解析为 @ModelAttribute