方法参数

下表显示了受支持的控制器方法参数。

需要阻塞I/O(例如,读取请求体)才能解析的参数支持响应式类型(Reactor、RxJava或其他)。这在“描述”列中进行了标记。不需要阻塞的参数不期望使用响应式类型。

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

控制器方法参数 描述

ServerWebExchange

访问完整的ServerWebExchange——HTTP请求和响应的容器、请求和会话属性、checkNotModified方法等。

ServerHttpRequest, ServerHttpResponse

访问HTTP请求或响应。

WebSession

访问会话。这不会强制启动新会话,除非添加了属性。支持响应式类型。

java.security.Principal

当前已认证的用户——如果已知,可能是特定的Principal实现类。支持响应式类型。

org.springframework.http.HttpMethod

请求的 HTTP 方法。

java.util.Locale

当前请求区域设置,由可用的最具体LocaleResolver确定——实际上是已配置的LocaleResolver/LocaleContextResolver

java.util.TimeZone + java.time.ZoneId

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

@PathVariable

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

@MatrixVariable

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

@RequestParam

用于访问查询参数。参数值转换为声明的方法参数类型。请参阅@RequestParam

请注意,使用@RequestParam是可选的——例如,设置其属性。请参阅此表后面的“任何其他参数”。

@RequestHeader

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

@CookieValue

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

@RequestBody

用于访问HTTP请求体。通过使用HttpMessageReader实例,请求体内容转换为声明的方法参数类型。支持响应式类型。请参阅@RequestBody

HttpEntity<B>

用于访问请求头和请求体。请求体通过HttpMessageReader实例转换。支持响应式类型。请参阅HttpEntity

@RequestPart

用于访问multipart/form-data请求中的部件。支持响应式类型。请参阅多部分内容多部分数据

java.util.Maporg.springframework.ui.Model

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

@ModelAttribute

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

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

ErrorsBindingResult

用于访问命令对象(即@ModelAttribute参数)的验证和数据绑定错误。ErrorsBindingResult参数必须紧跟在验证的方法参数之后声明。

SessionStatus + 类级别 @SessionAttributes

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

UriComponentsBuilder

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

@SessionAttribute

用于访问任何会话属性——与作为类级别@SessionAttributes声明结果存储在会话中的模型属性不同。有关详细信息,请参阅@SessionAttribute

@RequestAttribute

用于访问请求属性。有关详细信息,请参阅@RequestAttribute

任何其他参数

如果方法参数与上述任何一种都不匹配,则默认情况下,如果它是简单类型(由BeanUtils#isSimpleProperty确定),则解析为@RequestParam;否则,解析为@ModelAttribute

© . This site is unofficial and not affiliated with VMware.