3.2.2 请求处理方法中可出现的参数类型
3.2.2 请求处理方法中可出现的参数类型
每个请求处理方法可以有多个不同类型的参数。
如果需要访问HttpServletRequest对象,则可以添加HttpServletRequest作为参数, Spring会将对象正确地传递给方法:
1 |
|
如果需要访问HttpSession对象,则可以添加HttpSession作为参数, Spring会将对象正确地传递给方法:
1 |
|
可以在请求处理方法中出现的参数类型
下面是可以在请求处理方法中出现的参数类型:
java类型
java.io包
java.io.InputStream或java.io.Reader-java.io.OutputStream或java.io.Writer
java.util包
java.util.Localejava.util.Map
java.security包
java.security.PrincipalHttpEntity<?>
javax.servlet包
javax.servlet.ServletRequest或javax.servlet.http.HttpServletRequestjavax.servlet.ServletResponse或javax.servlet.http.HttpServletResponsejavax.servlet.http.HttpSession
Spring类型
validation包
org.springframework.validation.Errors,org.springframework.validation.BindingResult
web包
org.springframework.web.context.request.WebRequest或org.springframework.web.context.request.NativeWebRequestorg.springframework.web.bind.support.SessionStatusorg.springframework.web.util.UriComponentsBuilderorg.springframework.web.servlet.mvc.support.RedirectAttributes
ui包
org.springframework.ui.Modelorg.springframework.ui.ModelMap
validation包
org.springframework.validation.Errorsorg.springframework.validation.BindingResult
重要类型
WebRequest类
这里重点说明一下org.springframework.web.context.request.WebRequest这个对象。 WebRequest是Spring MVC提供的统一请求访问接口,
WebRequest可以访问请求相关数据,如参数数据、WebRequest可以访问请求头数据,WebRequest可以访问请求作用域的数据WebRequest可以访问会话作用域中的数据
但是WebRequest无法访问Cookie区数据,
NativeWebRequest继承了WebRequest,并提供访问本地Servlet API的方法。
WebRequest重点方法
WebRequest中有如下这些重点方法:
| 方法 | 描述 |
|---|---|
getParameter(String name) |
根据请求参数名获取请求参数值。等同于Servlet API的request.getParameter(String name)。 |
getHeader(String name) |
根据请求头参数名获取请求头参数值,等同于ServletAPI的request.getHeader(String name) |
setAttribute(String name,Object value,int scope) |
保存数据到指定的作用域 |
getAttribute(String name,int scope) |
从指定的作用域中提取数据 |
setAttribute方法
setAttribute方法等同于Servlet API的scope(request,session).setAttribute(String name,Object value)方法。参数中的int scope是WebRequest对象中定义的两个常量SCOPE_REQUEST(请求作用域)、SCOPE_SESSION(会话作用域)
1 | // 保存名称为username的值到request作用域 |
getAttribute方法
getAttribute方法等同于Servlet API的scope(request,session).getAttribute(String name)方法。
1 | // 从request作用域中取出名称为username的值 |
从框架的无侵入性来说,建议使用WebRequest对象替代Servlet API的HttpServletRequest对象和HttpSession对象。
Model类型
org.springframework.ui.Model是其中最重要的类型。这不是一个Servlet API类型,而是一个Spring MVC类型,其中包含了Map对象用来存储数据。
如果方法中添加了Model参数,则每次调用请求处理方法时, Spring MVC都会创建Model对象,并将其作为参数传递给方法。
可以出现在请求处理方法参数列表中的注解
@PathVariable注解、@MatrixVariable注解、@RequestParam注解、@RequestHeader注解、@RequestBody注解、@RequestPart注解