对于最新稳定版本,请使用 Spring Framework 7.0.6spring-doc.cadn.net.cn

方法参数

下表描述了支持的控制器方法参数。任何参数均不支持响应式类型。spring-doc.cadn.net.cn

JDK 8 的 java.util.Optional 可作为方法参数使用,与具有 required 属性的注解(例如 @RequestParam@RequestHeader 等)结合使用时,等同于设置 required=falsespring-doc.cadn.net.cn

控制器方法参数 <description> </description>

WebRequest, NativeWebRequestspring-doc.cadn.net.cn

无需直接使用 Servlet API,即可通用地访问请求参数、请求属性和会话属性。spring-doc.cadn.net.cn

jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponsespring-doc.cadn.net.cn

选择任意特定的请求或响应类型——例如,ServletRequestHttpServletRequest, 或 Spring 的 MultipartRequestMultipartHttpServletRequestspring-doc.cadn.net.cn

jakarta.servlet.http.HttpSessionspring-doc.cadn.net.cn

强制要求会话的存在。因此,此类参数永远不会为 null。 请注意,会话访问不是线程安全的。如果允许多个请求并发访问同一个会话,请考虑将 RequestMappingHandlerAdapter 实例的 synchronizeOnSession 标志设置为 truespring-doc.cadn.net.cn

jakarta.servlet.http.PushBuilderspring-doc.cadn.net.cn

用于以编程方式执行 HTTP/2 资源推送的 Servlet 4.0 Push Builder API。 请注意,根据 Servlet 规范,如果客户端不支持该 HTTP/2 功能,则注入的 PushBuilder 实例可能为 null。spring-doc.cadn.net.cn

java.security.Principalspring-doc.cadn.net.cn

当前已认证的用户——如果已知,可能是某个特定的 Principal 实现类。spring-doc.cadn.net.cn

请注意,如果该参数带有注解,则不会被提前解析,以便允许自定义解析器在回退到通过 HttpServletRequest#getUserPrincipal 进行默认解析之前对其进行解析。 例如,Spring Security 的 Authentication 实现了 Principal 接口,通常会通过 HttpServletRequest#getUserPrincipal 以这种方式注入, 但如果它同时还使用了 @AuthenticationPrincipal 注解,则会通过 Spring Security 的自定义解析器,利用 Authentication#getPrincipal 来进行解析。spring-doc.cadn.net.cn

HttpMethodspring-doc.cadn.net.cn

请求的 HTTP 方法。spring-doc.cadn.net.cn

java.util.Localespring-doc.cadn.net.cn

当前请求的区域设置,由可用的最具体的 LocaleResolver 确定(实际上,即配置的 LocaleResolverLocaleContextResolver)。spring-doc.cadn.net.cn

java.util.TimeZone + java.time.ZoneIdspring-doc.cadn.net.cn

LocaleContextResolver 确定的与当前请求关联的时区。spring-doc.cadn.net.cn

java.io.InputStream, java.io.Readerspring-doc.cadn.net.cn

用于访问 Servlet API 所暴露的原始请求体。spring-doc.cadn.net.cn

java.io.OutputStream, java.io.Writerspring-doc.cadn.net.cn

用于访问 Servlet API 所暴露的原始响应体。spring-doc.cadn.net.cn

@PathVariablespring-doc.cadn.net.cn

用于访问 URI 模板变量。请参阅URI 模式spring-doc.cadn.net.cn

@MatrixVariablespring-doc.cadn.net.cn

用于访问 URI 路径段中的名称-值对。请参阅矩阵变量spring-doc.cadn.net.cn

@RequestParamspring-doc.cadn.net.cn

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

请注意,对于简单的参数值,使用 @RequestParam 是可选的。 请参见本表格末尾的“任何其他参数”部分。spring-doc.cadn.net.cn

@RequestHeaderspring-doc.cadn.net.cn

用于访问请求头。请求头的值会被转换为声明的方法参数类型。请参阅 @RequestHeaderspring-doc.cadn.net.cn

@CookieValuespring-doc.cadn.net.cn

用于访问 Cookie。Cookie 值会被转换为声明的方法参数类型。请参阅 @CookieValuespring-doc.cadn.net.cn

@RequestBodyspring-doc.cadn.net.cn

用于访问 HTTP 请求体。请求体内容通过 HttpMessageConverter 实现转换为声明的方法参数类型。请参阅 @RequestBodyspring-doc.cadn.net.cn

HttpEntity<B>spring-doc.cadn.net.cn

用于访问请求头和请求体。请求体会通过 HttpMessageConverter 进行转换。 参见 HttpEntityspring-doc.cadn.net.cn

@RequestPartspring-doc.cadn.net.cn

用于访问 multipart/form-data 请求中的某一部分,并使用 HttpMessageConverter 转换该部分的主体内容。参见Multipartspring-doc.cadn.net.cn

java.util.Map, org.springframework.ui.Model, org.springframework.ui.ModelMapspring-doc.cadn.net.cn

用于访问在 HTML 控制器中使用的模型,并在视图渲染时将其暴露给模板。spring-doc.cadn.net.cn

RedirectAttributesspring-doc.cadn.net.cn

指定在重定向时使用的属性(即,附加到查询字符串中)以及临时存储的闪存属性,这些闪存属性会保留到重定向后的下一次请求为止。 参见重定向属性闪存属性spring-doc.cadn.net.cn

@ModelAttributespring-doc.cadn.net.cn

用于访问模型中现有的属性(如果不存在则实例化),并应用数据绑定和验证。另请参阅 @ModelAttribute 以及 ModelDataBinderspring-doc.cadn.net.cn

请注意,使用 @ModelAttribute 是可选的(例如,用于设置其属性)。 请参见本表格末尾的“任何其他参数”。spring-doc.cadn.net.cn

Errors, BindingResultspring-doc.cadn.net.cn

用于访问命令对象(即 @ModelAttribute 参数)的验证和数据绑定所产生的错误,或 @RequestBody@RequestPart 参数验证所产生的错误。您必须在经过验证的方法参数之后立即声明一个 ErrorsBindingResult 参数。spring-doc.cadn.net.cn

SessionStatus + 类级别的 @SessionAttributesspring-doc.cadn.net.cn

用于标记表单处理完成,这将触发清理通过类级别 @SessionAttributes 注解声明的会话属性。请参阅 @SessionAttributes 以获取更多详情。spring-doc.cadn.net.cn

UriComponentsBuilderspring-doc.cadn.net.cn

用于根据当前请求的主机、端口、协议方案、上下文路径以及 Servlet 映射的字面部分来构建相对 URL。参见 URI 链接spring-doc.cadn.net.cn

@SessionAttributespring-doc.cadn.net.cn

要访问任何会话属性,这与由于类级别的 @SessionAttributes 声明而存储在会话中的模型属性不同。请参阅 @SessionAttribute 了解更多详情。spring-doc.cadn.net.cn

@RequestAttributespring-doc.cadn.net.cn

用于访问请求属性。请参阅 @RequestAttribute 了解更多详情。spring-doc.cadn.net.cn

任何其他参数spring-doc.cadn.net.cn

如果一个方法参数未匹配到本表中前面列出的任何值,并且它是一个简单类型(由 BeanUtils#isSimpleProperty 判定),则该参数将被解析为 @RequestParam。否则,它将被解析为 @ModelAttributespring-doc.cadn.net.cn