SpringMVC四种返回值类型总结

虽然现在SpringBoot框架很火,但是SpringBoot并不能处理以及响应客户端的请求,最终还是要依赖SpringMVC框架,所以接下来介绍SpringMVC Controller方法的返回值类型,涵盖所有返回值类型。这篇博客只是扫盲点,没具体深入。

1. ModelAndView

  1. 我们在使用SpringMVC的时候,经常返回ModelAndView类型,现在前后端分离后,后端都是返回JSON格式数据为主。
  2. 返回 ModelAndView类型,我们可以在ModelAndView对象中指定视图名称,然后也可以绑定数据,如下面代码:
@RequestMapping("/userList")
public ModelAndView getAllUser(ModelAndView mv) {
    List users= userService.getAllUser();
    //添加数据模型到request域中
    mv.addObject("users", users);
    mv.setViewName("userList");//指定视图名
    return mv;
}

2.void

如果返回值为void的话,并不是真正没有返回值,而是会出现以下几种情况:

  1. 如果方法内真的没有返回值,那么SpringMVC默认把deleteUser(映射的URL)当成视图名称来解析,如果存在该视图,就返回给客户端;如果不存在该视图,就会报视图找不到异常。
@RequestMapping("/deleteUser")
public void deleteUser() {
    //删除操作
}

通过加@ResponseBody来修改默认行为,加上该注解表示返回JSON数据,这里返回空JSON数据,而不是把URL当成视图名称来解析

@RequestMapping("/deleteUser")
@ResponseBody
public void deleteUser() {
    //删除操作
}
  1. 请求转发
@GetMapping("/")
public void root(HttpServletRequest req,HttpServletResponse resp) {
    req.getRequestDispatcher("/WEB-INF/jsp/index.jsp").forward(req,resp);
}
  1. 重定向
@RequestMapping("/")
@ResponseBody
public void root(HttpServletResponse resp){
    resp.setStatus(302);
    resp.addHeader("Location","/WEB-INF/jsp/index.jsp");
}
@RequestMapping("/")
@ResponseBody
public void root(HttpServletResponse resp){
    resp.sendRedirect("/WEB-INF/jsp/index.jsp");
}

3. String

当方法的返回值为String的时候,也会出现下面几种情况:

  1. 逻辑视图名
    返回String最常见的是逻辑视图名,这种时候一般利用默认的参数Model来传递数据
@RequestMapping("/deleteUser")
//方法返回JSON数据
@ResponseBody   
public String deleteUser(Model model) {
    model.addAttribute("msg","删除成功");
    return "userList";
}
  1. 重定向
    登录失败的时候重定向到登录页面。
@RequestParam("/login")
public String redirect(User user){
    if{
        //登录成功...
    }else{
        //登录失败,重定向到登录页面
        return "redirect:tologin";
    }
}
  1. 请求转发
    登录失败的时候请求转发到登录页面。
@RequestParam("/login")
public String redirect(User user){
    if{
        //登录成功...
    }else{
        //登录失败,转发到登录页面
        return "forward:tologin";
    }
}
  1. 真的返回String,相当于JSON格式的数据
@RequestMapping("/deleteUser")
@ResponseBody
public String deleteUser() {
    try{
        //删除成功
        return "删除成功";
    }catch(Exception e){
        return "删除失败";
    }
}

4.JSON

现在前后端分离的情况下,大部分后端只需要返回JSON数据即可,List 集合、Map集合,实体类等都可以返回,这些数据由 HttpMessageConverter自动转为JSON ,如果使用了Jackson或者Gson,不需要额外配置就可以自动返回JSON了,因为框架帮我们提供了对应的HttpMessageConverter ,如果使用了Alibaba的Fastjson的话,则需要自己手动提供一个相应的 HttpMessageConverter的实例,方法的返回值如下面代码:

@GetMapping("/getUser")
@ResponseBody
public User getUser() {
    User user = userService.getUser();
    return user;
}
@RequestMapping("/userList")
@ResponseBody
public List getAllUser() {
    List users = userService.getAllUser();
    return users;
}

好了,关于SpringMVC的返回值类型就总结完了,我们开发中也就是使用这几种返回值类型。

你可能感兴趣的:(SpringMVC四种返回值类型总结)