@RequestMapping 标注的处理器函数的签名可以是任意的,形参可以以任意顺序出现,除BindingResult除外。
支持的形参类型包括:
1. org.springframework.web.context.request.WebRequest 或者 org.springframework.web.context.request.NativeWebRequest 。允许进行一般的请求参数操作,而不必绑定到native servlet API上,如对request/session 属性的操作。
2. Request 或者 response 对象(servlet API)。可以是某些他额定类型的request或者response。例如ServletRequest或者HttpServletRequest或者Spring的MultipartRequest/MultipartHttpServletRequest。
3. HttpSession 类型的session对象。这种类型的参数强制必须有一个与之对应的session出现。因而,这个参数永远都不会是null。
会话操作可能是非线程安全的,尤其在servelt 环境中。如果允许多个请求并发操作同一个会话,那么可以设置RequestMappingHandlerAdapter 的 synchronizeOnSession 的标志位true来实现线程安全。
4. java.servlet.http.PushBuilder :针对关联的servlet 4.0 push builder API ,允许通过编程的方式实现对HTTP/2资源的push。
5.java.security.Principal 或者 是 Principal 的实现类,包含当前已被认真的用户。
6. org.springframework.http.HttpMethod :针对HTTP request method,以spring HttpMethod 枚举值的形式出现。
7. java.util.Locale :表示当前request的场所,通常由MVC 环境中的LocaleResolver/LocaleContextResolver 这种特定的场所解析器来决定。
8. java.util.TimeZone (Java 6+) / java.time.ZoneId (Java 8+) :表示当前请求所处的时区,由LocaleContextResolver 决定。
9.java.io.InputStream /java.io.Reader :用来操作request的内容。该值是由servlet API 暴露的原生InputStream/Reader。
10.java.io.OutputStream /java.io.Writer :用来产生response的内容。该值是由servlet API 暴露的原生的OutputStream/Writer。
11.@PathVariable 元注解标注的参数,用来操作URI 模板变量
12.@MatrixVariable 元注解标注的参数,用来操作URI 路径段中的称为矩阵变量的name-value 对。
13.@RequestParam 元注解标注的参数,用来操作特定的servlet 请求参数。参数值被转换为所声明的函数参数的类型。
14.@RequestHeader 元注解标注的参数,用来操作特定的servlet 请求的HTTP header。参数值被转换为所声明的函数参数的类型。
15.@RequestBody 元注解标注的参数,用来操作HTTP request 的body。参数值被HttpMessageConverter 转换为所声明的函数参数的类型。
16.@RequestPart 元注解标注的参数,用来操作“multipart/form-data”请求中的内容。
17.@SessionAttribute 元注解标注的参数,用来操作存在的、永久的会话属性,例如用户的认证信息。与之相对的是暂存在会话中,通过@SessionAttributes 标注的作为控制器workflow一部分的模型属性。注意@SessionAttribute 和 @SessionAttributes是两个不同的注解。
18.@RequestAttribute 元注解标注的参数,用来操作request的属性。
19. HttpEntity<?> parameters :用来操作servlet request的HTTP 头和内容。请求的stream将通过HttpMessageConverter 转换为entity body 。
20. java.util.Map / org.springframework.ui.Model /org.springframework.ui.ModelMap :用来丰富暴露给web 视图的隐式Model的种类。
21.org.springframework.web.servlet.mvc.support.RedirectAttributes :用来指定在重定向场景下的一个确切的属性集合,也可以用来添加flash 属性(flash 属性是指暂存在服务器端,并对重定向之后的请求仍然有用的属性)。
22. Command or form objects:用来通过setter函数或者直接通过field在可自定义的类型转换的支持下,将请求参数绑定到bean 的properties上,依赖于@InitBinder 方法或者HandlerAdapter 的配置。
23. org.springframework.validation.Errors /org.springframework.validation.BindingResult :表示对前面的command或者form对象的校验结果。
24. org.springframework.web.bind.support.SessionStatus 状态处理器,用来将表单处理标记为已完成,这将触发对由@SessionAttributes元注解所标注的类级别的处理器进行会话属性的清理。
25. org.springframework.web.util.UriComponentsBuilder :一个用来准备相对当前请求的host、port、schema、context path、以及servelt mapping 字面字符路径的URL构建器。
由于函数可能包含多个model对象,而spring将为每个model创建一个BindingResult 实例,因而Errors 和 BindingReslut 参数后必须紧接着model 对象。