方法参数

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

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

控制器方法参数 描述

WebRequestNativeWebRequest

对请求参数以及请求和会话属性的通用访问,无需直接使用 Servlet API。

jakarta.servlet.ServletRequestjakarta.servlet.ServletResponse

选择任何特定的请求或响应类型,例如 ServletRequestHttpServletRequest 或 Spring 的 MultipartRequestMultipartHttpServletRequest

jakarta.servlet.http.HttpSession

强制存在会话。因此,此类参数永远不会为 null。请注意,会话访问不是线程安全的。如果允许多个请求同时访问会话,请考虑将 RequestMappingHandlerAdapter 实例的 synchronizeOnSession 标志设置为 true

jakarta.servlet.http.PushBuilder

用于以编程方式进行 HTTP/2 资源推送的 Servlet 4.0 推送构建器 API。请注意,根据 Servlet 规范,如果客户端不支持该 HTTP/2 功能,则注入的 PushBuilder 实例可能为 null。

java.security.Principal

当前经过身份验证的用户,如果已知,则可能是特定的 Principal 实现类。

请注意,如果此参数已添加注解,则不会急切地解析它,以便允许自定义解析器在回退到通过 HttpServletRequest#getUserPrincipal 进行默认解析之前解析它。例如,Spring Security 的 Authentication 实现 Principal,并将作为 HttpServletRequest#getUserPrincipal 注入,除非它也添加了 @AuthenticationPrincipal 注解,在这种情况下,它将由 Spring Security 的自定义解析器通过 Authentication#getPrincipal 解析。

HttpMethod

请求的 HTTP 方法。

java.util.Locale

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

java.util.TimeZone + java.time.ZoneId

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

java.io.InputStreamjava.io.Reader

用于访问 Servlet API 公开的原始请求体。

java.io.OutputStreamjava.io.Writer

用于访问 Servlet API 公开的原始响应体。

@PathVariable

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

@MatrixVariable

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

@RequestParam

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

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

@RequestHeader

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

@CookieValue

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

@RequestBody

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

HttpEntity<B>

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

@RequestPart

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

java.util.Maporg.springframework.ui.Modelorg.springframework.ui.ModelMap

用于访问 HTML 控制器中使用的模型,并在视图呈现的一部分作为模板公开。

RedirectAttributes

指定在重定向情况下使用的属性(即附加到查询字符串)和闪存属性,这些属性将临时存储,直到重定向后的请求。请参阅 重定向属性闪存属性

@ModelAttribute

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

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

ErrorsBindingResult

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

SessionStatus + 类级 @SessionAttributes

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

UriComponentsBuilder

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

@SessionAttribute

要访问任何会话属性,与由于类级别的@SessionAttributes声明而存储在会话中的模型属性形成对比。有关更多详细信息,请参阅@SessionAttribute

@RequestAttribute

要访问请求属性。有关更多详细信息,请参阅@RequestAttribute

任何其他参数

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