方法参数

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

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

控制器方法参数 描述

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推送构建器API,用于程序化HTTP/2资源推送。请注意,根据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.InputStream, java.io.Reader

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

java.io.OutputStream, java.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.Map, org.springframework.ui.Model, org.springframework.ui.ModelMap

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

RedirectAttributes

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

@ModelAttribute

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

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

Errors, BindingResult

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

SessionStatus + 类级别@SessionAttributes

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

UriComponentsBuilder

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

@SessionAttribute

用于访问任何会话属性,与作为类级别@SessionAttributes声明的模型属性不同。请参阅@SessionAttribute获取更多详细信息。

@RequestAttribute

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

任何其他参数

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