支持的方法参数类型
每个请求处理方法都可以有多个参数, 参数类型可以为以下类型, 可根据需要添加方法声明参数.
- javax.servlet.ServletRequest 或javax.servlet.http.HttpServletRequest
- 将客户端浏览器发出的请求封装为请求实例
- javax.servlet.ServletResponse 或javax.servlet.http.HttpServletResponse
- 将服务端的响应封装为响应实例
- javax.servlet.http.HttpSession
- java.util.Locale
- java.io.InputStream 或 java.io.Reader
- 获取输入流, 这两个对象与通过Servlet API拿到的InputSteam和Reader对象是一样的
- java.io.OutputSteam 或 java.io.Writer
- 获取输出流, 这两个对象与通过Servlet API拿到的OutputSteam和Writer对象是一样的
- org.springframework.http.HttpEntity<T>
- 其提供了对HTTP请求头和请求内容的存取
- org.springframework.web.servlet.mvc.support.RedirectAttributes
- 用以指定重定向传递的属性集以及添加flash属性(暂存在服务端的属性,它们会在下次重定向请求的范围中有效)
- 具体用法可参考 -- 重定向和转发以及mvc:view-controller标签的使用
- org.springframework.validation.Errors 或 org.springframework.validation.BindingResult
- 验证结果对象,用于存储前面的命令或表单对象的验证错误信息
- 在参数列表中, Errors或BindingResult参数必须紧跟在其所绑定的验证对象后面. 这是因为, 在参数列表中允许有多于一个的模型对象, spring会为它们创建不同的BindingResult实例
- 具体用法可参考 -- JSR303数据校验
- org.springframework.web.bind.support.SessionStatus
- 获取session状态,用以标记当前的表单处理已结束
- org.springframework.web.util.UriComponentsBuilder
- 构造器对象, 用于构造当前请求URL相关的信息, 比如主机名、端口号、资源类型(scheme)、上下文路径、servlet映射中的相对部分(literal part)等
- @PathVariable @MatrixVariable
- java.util.Map 或org.springframework.io.Model 或 org.springframework.ui.ModelMap
- 用以增强默认暴露给视图层的模型(model)的功能
- @RequestParam注解
- 带有@RequestParam注解的参数, 其存放了Servlet请求中所指定的参数. 参数的值会被转换成方法参数所声明的类型
- @RequestHeader注解
- 带有@RequestHeader注解的参数, 其存放了Servlet请求中所指定的HTTP请求头的值. 参数的值会被转换成方法参数所声明的类型
- @RequestBody注解
- 带有@RequestBody注解的参数, 提供了对HTTP请求体的存取. 参数的值通过HttpMessageConverter被转换成方法参数所声明的类型
- @RequestPart注解
- 带有@RequestPart注解的参数, 提供了对一个"multipart/form-data请求块(request part)内容的存取
命令或表单对象, 它们用于将请求参数直接绑定到bean字段(可能是通过setter方法)
所有方法参数中, 最重要的是org.springframework.ui.Model, 它是一个接口, 功能类似于java.util.Map,用于存储模型数据. springmvc调用处理方法前, 会创建一个隐含的模型对象, 作为模型数据的存储容器. 如果处理方法的方法参数为Model, 那么springmvc会将模型的引用传递给此参数. 那么在方法内部就可以访问模型中的数据, 也可以向模型中添加新的属性数据.
支持的方法返回类型
请求处理方法的返回类型如下:
- org.springframework.web.servlet.ModelAndView
- org.springframework.ui.Model
- java.util.Map<K, V>
- org.springframework.web.servlet.View
- java.lang.String
- HttpEntity<?> 或ResponseEntity<?>
- java.util.concurrent.Callable
- org.springframework.web.context.request.async.DeferredResult<?>
- void
如果控制器处理方法的返回值是ModelAndView类型, 其既包括模型数据, 又包括视图信息, 那么springmvc就可以使用包含的视图对模型数据进行渲染, 而且可以非常方便的访问模型数据. ModelAndview对象常用的添加模型数据和设置视图的方法如下:
// 添加模型数据
addObject(String attributeName, ObjectattributeValue);
// 设置视图
setViewName(String viewName);