18.2 编写请求处理方法

18.2 编写请求处理方法

每个请求处理方法可以有多个不同类型的参数,以及一个多种类型的返回结果。例如,如果在请求处理方法中需要访问HttpSession对象,则可以使用HttpSession作为方法的参数,Spring会将HttpSession对象正确地传递给方法:

1
2
3
4
5
6
@RequestMapping("/uri")
public String myMethod(HttpSession session) {
...
session.addAttribute(key, value);
...
}

或者,若需要访问客户端语言环境和HttpServletRequest对象,则可以在方法签名上包括这样的参数:

1
2
3
4
5
6
7
@RequestMapping("/uri")
public String myOtherMethod(HttpServletRequest request,
Locale locale) {
...
// access Locale and HttpServletRequest here
...
}

允许作为请求处理方法的参数的类型

下面是可以在请求处理方法中出现的参数类型:

  • javax.servlet.ServletRequestjavax.servlet.http.HttpServletRequest
  • javax.servlet.ServletResponsejavax.servlet.http.HttpServletResponse
  • javax.servlet.http.HttpSession
  • org.springframework.web.context.request.WebRequestorg.springframework.web.context.request.NativeWebRequest
  • java.util.Locale
  • java.io.InputStreamjava.io.Reader
  • java.io.OutputStreamjava.io.Writer
  • java.security.Principal
  • HttpEntity<?>
  • java.util.Map/
  • org.springframework.ui.Model/
  • org.springframework.ui.ModelMap
  • org.springframework.web.servlet.mvc.support.RedirectAttrib
  • org.springframework.validation.Errors/
  • org.springframework.validation.BindingResult

以及命令或表单对象:

  • org.springframework.web.bind.support.SessionStatus
  • org.springframework.web.util.UriComponentsBuilder
  • @PathVariable, @MatrixVariable注释的对象
  • @RequestParam, @RequestHeader, @RequestBody@RequestPart

特别重要的是org.springframework.ui.Model类型。这不是一个Servlet API类型,而是一个包含MapSpring MVC类型。每次调用请求处理方法时,Spring MVC都创建Model对象并将各种对象注入到Map中。

请求处理方法可以返回的类型

请求处理方法可以返回如下类型的对象:

  • ModelAndView
  • Model
  • Map包含模型的属性
  • View
  • 代表逻辑视图名的String
  • void
  • 提供对Servlet的访问,以响应HTTP头部和内容HttpEntityResponseEntity对象
  • Callable
  • DeferredResult
  • 其他任意类型,Spring将其视作输出给View的对象模型

本章后续会展示一个例子,进一步学习如何开发一个请求处理方法。