跳到主要内容
版本:7.0.3

方法参数

Hunyuan 7b 中英对照 Method Arguments

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

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.PushBuilderServlet 4.0的push builder API用于程序化地推送HTTP/2资源。请注意,从Servlet 6.1版本开始,这个API就已经被弃用了。
java.security.Principal当前已认证的用户——如果已知的话,可能是一个具体的 Principal 实现类。

请注意,这个参数并不会被立即解析。如果对其添加了注解,就是为了允许在通过 HttpServletRequest#getUserPrincipal 进行默认解析之前,由自定义解析器来先进行解析。例如,Spring Security 的 Authentication 类实现了 Principal 接口,通常会通过 HttpServletRequest#getUserPrincipal 被注入;除非它还带有 @AuthenticationPrincipal 注解,在这种情况下,它就会通过 Authentication#getPrincipal 由 Spring Security 的自定义解析器来解析。 |
| HttpMethod| 请求的HTTP方法。 |
| java.util.Locale| 当前请求的区域设置(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请求参数,包括多部分文件(multipart files),参数值会转换为声明的方法参数类型。请参阅@RequestParam以及Multipart

需要注意的是,对于简单的参数值,使用@RequestParam是可选的。请参见此表格末尾的“其他参数(Any other argument)”部分。 |
| @RequestHeader| 用于访问请求头信息。请求头值会转换为声明的方法参数类型。请参阅@RequestHeader。 |
| @CookieValue| 为了访问cookies,cookies的值会被转换为声明的方法参数类型。请参阅@CookieValue。 |
| @RequestBody| 为了访问HTTP请求体,请求体内容会通过使用HttpMessageConverter实现来转换为声明的方法参数类型。请参阅@RequestBody。 |
| HttpEntity<B>| 用于访问请求头和请求体。请求体会使用HttpMessageConverter进行转换。请参见HttpEntity。 |
| @RequestPart| 要访问 multipart/form-data 请求中的某个部分,可以使用 HttpMessageConverter 对该部分的正文进行转换。详情请参见 Multipart。 |
| java.util.Map, org.springframework.ui.Model, org.springframework.ui.ModelMap| 用于访问在HTML控制器中使用的模型,并在视图渲染过程中将其暴露给模板。 |
| RedirectAttributes| 指定在重定向时使用的属性(即要附加到查询字符串中的属性),以及需要在重定向后的请求之前暂时存储的“Flash”属性。请参阅重定向属性Flash属性。 |
| @ModelAttribute| 要访问模型中已存在的属性(如果不存在则会实例化该属性),并应用数据绑定和验证,可参考@ModelAttribute,以及ModelDataBinder

请注意,使用[@ModelAttribute]是可选的(例如,用于设置其属性)。请参阅此表格末尾的“其他任何参数”部分。 |
| Errors, BindingResult| 为了获取命令对象(即@ModelAttribute参数)的验证错误和数据绑定错误,或者@RequestBody@RequestPart参数的验证错误,你必须在经过验证的方法参数之后立即声明一个ErrorsBindingResult参数。 |
| SessionStatus + class-level @SessionAttributes| 用于标记表单处理完成,这会触发通过类级@SessionAttributes注解声明的会话属性的清除。有关更多详细信息,请参阅@SessionAttributes。 |
| UriComponentsBuilder| 为了准备一个相对于当前请求的主机、端口、协议(scheme)、上下文路径(context path)以及Servlet映射中的字面部分(literal part)的URL,请参阅URI链接。 |
| @SessionAttribute| 要访问任何会话属性(session attribute),与通过类级别的@SessionAttributes声明存储在会话中的模型属性(model attributes)不同。有关更多详细信息,请参见@SessionAttribute。 |
| @RequestAttribute| 如需访问请求属性,请参阅@RequestAttribute以获取更多详细信息。 |
| 还有其他论点吗?| 如果一个方法参数与本表中的任何先前值都不匹配,并且它是一个简单类型(通过BeanUtils#isSimpleProperty来确定),那么它将被解析为@RequestParam。否则,它将被解析为@ModelAttribute。 |