学科分类
目录
SSM框架

请求处理方法的参数类型和返回类型

在控制器类中,每一个请求处理方法都可以有多个不同类型的参数,以及一个多种类型的返回结果。例如在入门案例中,handleRequest()方法的参数就是对应请求的HttpServletRequest和HttpServletResponse两种参数类型。除此之外,还可以使用其他的参数类型,例如在请求处理方法中需要访问HttpSession对象,则可以添加HttpSession作为参数,Spring会将对象正确的传递给方法,其使用示例如下:

@RequestMapping(value="/firstController")
public ModelAndView (**HttpSession session**){
  ...
  return mav;
}

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

● javax.servlet.ServletRequest / javax.servlet.http.HttpServletRequest

● javax.servlet.ServletResponse / javax.servlet.http.HttpServletResponse

● javax.servlet.http.HttpSession

● org.springframework.web.context.request.WebRequest或

org.springframework.web.context.request.NativeWebRequest

● java.util.Locale

● java.util.TimeZone (Java 6+) / java.time.ZoneId (on Java 8)

● java.io.InputStream / java.io.Reader

● java.io.OutputStream / java.io.Writer

● org.springframework.http.HttpMethod

● java.security.Principal

● @PathVariable、@MatrixVariable、@RequestParam、@RequestHeader、@RequestBody、@RequestPart、@SessionAttribute、@RequestAttribute注解

● HttpEntity<?>

● java.util.Map / org.springframework.ui.Model /org.springframework.ui.ModelMap

● org.springframework.web.servlet.mvc.support.RedirectAttributes

● org.springframework.validation.Errors /org.springframework.validation.BindingResult

● org.springframework.web.bind.support.SessionStatus

● org.springframework.web.util.UriComponentsBuilder

需要注意的是,org.springframework.ui.Model类型不是一个Servlet API类型,而是一个包含了Map对象的Spring MVC类型。如果方法中添加了Model参数,则每次调用该请求处理方法时,Spring MVC都会创建Model对象,并将其作为参数传递给方法。

在入门案例中,请求处理方法返回的是一个ModelAndView类型的数据。除了此种类型外,请求处理方法还可以返回其他类型的数据。Spring MVC所支持的常见方法返回类型如下:

● ModelAndView

● Model

● Map

● View

● String

● void

● HttpEntity<?>或ResponseEntity<?>

● Callable<?>

● DeferredResult<?>

在上述所列举的返回类型中,常见的返回类型是ModelAndView、String和void。其中ModelAndView类型中可以添加Model数据,并指定视图;String类型的返回值可以跳转视图,但不能携带数据;而void类型主要在异步请求时使用,它只返回数据,而不会跳转视图。

由于ModelAndView类型未能实现数据与视图之间的解耦,所以在企业开发时,方法的返回类型通常都会使用String。既然String类型的返回值不能携带数据,那么在方法中是如何将数据带入视图页面的呢?这就用到了上面所讲解的Model参数类型,通过该参数类型,即可添加需要在视图中显示的属性。

返回String类型方法的示例代码如下:

@RequestMapping(value="/firstController")
public String handleRequest(HttpServletRequest request,
                                 HttpServletResponse response, Model model) {
    // 向模型对象中添加数据
    model.addAttribute("msg", "这是我的第一个Spring MVC程序");
    // 返回视图页面
    return "/WEB-INF/jsp/first.jsp";
}

在上述方法代码中,增加了一个Model类型的参数,通过该参数实例的addAttribute()方法即可添加所需数据。

String类型除了可以返回上述代码中的视图页面外,还可以进行重定向与请求转发,具体方式如下。

1. redirect重定向

例如,在修改用户信息操作后,将请求重定向到用户查询方法的实现代码如下:

@RequestMapping(value="/update")
public String update(HttpServletRequest request,
                                 HttpServletResponse response, Model model){
    ...
    // 重定向请求路径
    return "redirect:queryUser";
}

2. forward请求转发

例如,用户执行修改操作时,转发到用户修改页面的实现代码如下:

@RequestMapping(value="/toEdit")
public **String** update(HttpServletRequest request,
​                 HttpServletResponse response, Model model){
  ...
  // 请求转发
  return "forward:editUser";
}

关于重定向和转发的具体使用,后面章节中会有具体的应用案例,由于篇幅有限,这里就不再过多介绍。

点击此处
隐藏目录