Method Arguments

下一表格说明受支持的 Controller 方法参数。任何参数均不支持 Reactive 类型。

JDK 8 的 java.util.Optional 受支持用作方法参数,可与具有一定 required 属性的标注(例如,@RequestParam@RequestHeader 和其他)结合使用,并且与 required=false 等效。

Controller method argument Description

WebRequest, NativeWebRequest

一般可访问请求参数、请求和会话属性,而无需直接使用 Servlet API。

jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse

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

jakarta.servlet.http.HttpSession

强制执行会话的存在。因此,这样的参数决不会是 null。请注意,会话访问不是线程安全的。如果允许多个请求并发访问会话,请考虑将 RequestMappingHandlerAdapter 实例的 synchronizeOnSession 标志设置为 true

jakarta.servlet.http.PushBuilder

Servlet 4.0 push builder API 用于基于编程的 HTTP/2 资源推送。请注意,根据 Servlet 规范,注入的 PushBuilder 实例可以为 null,如果客户端不支持该 HTTP/2 功能的话。

java.security.Principal

当前经过身份验证的用户,有可能是特定 Principal 实现类的实例(如果已知)。请注意,如果不急于求成地解析该参数(如果进行了注解),则可以使用自定义解析器在通过 HttpServletRequest#getUserPrincipal 回退到默认解析之前解析该参数。例如,Spring Security Authentication 实现 Principal,并且通过 HttpServletRequest#getUserPrincipal 以这种方式进行注入,除非同时对其实施 @AuthenticationPrincipal 注释,在这种情况下,它将通过 Authentication#getPrincipal 使用自定义 Spring Security 解析器解析。

HttpMethod

请求的 HTTP 方法。

java.util.Locale

当前请求语言环境,由最具体的 LocaleResolver 确定(实际上是配置的 LocaleResolverLocaleContextResolver)。

java.util.TimeZone + java.time.ZoneId

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

java.io.InputStream, java.io.Reader

访问 Servlet API 暴露的原始请求正文。

java.io.OutputStream, java.io.Writer

访问 Servlet API 暴露的原始响应正文。

@PathVariable

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

@MatrixVariable

用于访问 URI 路径段中的名称-值对。请参见 Matrix Variables

@RequestParam

用于访问 Servlet 请求参数,包括 multipart 文件。参数值转换为声明的方法参数类型。请参见 @RequestParam 以及 Multipart。请注意,对于简单参数值,使用 @ RequestParam 是可选的。请参见本表末尾的“任何其他参数”。

@RequestHeader

访问请求标题。标题值将转换为声明的方法参数类型。请参阅 xref:web/webmvc/mvc-controller/ann-methods/requestheader.adoc[@RequestHeader

@CookieValue

访问 cookie。cookie 值将转换为声明的方法参数类型。请参阅 xref:web/webmvc/mvc-controller/ann-methods/cookievalue.adoc[@CookieValue

@RequestBody

访问 HTTP 请求正文。使用 HttpMessageConverter 实现将正文内容转换为声明的方法参数类型。请参阅 xref:web/webmvc/mvc-controller/ann-methods/requestbody.adoc[@RequestBody

HttpEntity<B>

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

@RequestPart

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

java.util.Map, org.springframework.ui.Model, org.springframework.ui.ModelMap

如需访问 HTML 控制器中使用的模型,并将其作为视图渲染的一部分公开到模板中。

RedirectAttributes

指定在重定向 (即追加到查询字符串) 和闪存属性的情况下使用哪些属性,以便临时存储到重定向后进行的请求。请参见 Redirect AttributesFlash Attributes

@ModelAttribute

用于访问模型中的现有属性(如果不存在则实例化),并应用数据绑定和验证。请参见 @ModelAttribute 以及 ModelDataBinder。请注意,使用 @ModelAttribute 是可选的(例如,要设置其属性)。请参见本表末尾的“任何其他参数”。

Errors, BindingResult

如需访问命令对象(也就是说,一个 @ModelAttribute 参数)的验证和数据绑定的错误,或一个 @RequestBody@RequestPart 参数验证的错误。您必须在经过验证的方法参数之后立即声明一个 ErrorsBindingResult 参数。

SessionStatus + class-level @SessionAttributes

做标记以便完成表单处理,从而触发清理通过类级 @SessionAttributes 注解声明的会话属性。更多详细信息,请参见 xref:web/webmvc/mvc-controller/ann-methods/sessionattributes.adoc[@SessionAttributes

UriComponentsBuilder

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

@SessionAttribute

如需访问任何会话属性,与根据类级 @SessionAttributes 声明存储在会话中的模型属性不同。更多详细信息,请参见 xref:web/webmvc/mvc-controller/ann-methods/sessionattribute.adoc[@SessionAttribute

@RequestAttribute

如需访问请求属性。更多详细信息,请参见 xref:web/webmvc/mvc-controller/ann-methods/requestattrib.adoc[@RequestAttribute

Any other argument

如果一个方法参数与本表中早先的值中的任何值都不匹配,并且它是一个简单类型(由 BeanUtils#isSimpleProperty 确定),那么它会作为一个 @RequestParam 进行解析。否则,它会作为一个 @ModelAttribute 进行解析。