Spring框架中@Controller类下的返回值

Spring中Controller返回值

  • 返回String

    • 根据字符串名返回需要相应在/templates下的html文件

      需要同时返回数据时, 只需要在Controller内部声明Model/ModelMap<String, Object>添加数据即可

    1
    2
    3
    4
    5
    @RequestMapping(value="/save", method=RequestMethod.POST)
    public void save(Demo demo, Model model) {
    model.addAttribute("msg", "Success");
    return "success"
    }
    • 重定向(redirect)

      浏览器中url会进行改变, 但是重定向的页面无法传递request请求, 只能够重新创建request并提交

    1
    2
    3
    4
    @RequestMapping(value="/save", method=RequestMethod.POST)
    public void save(Demo demo) {
    return "redirect:/demo/detail"
    }
    • 页面转发(forward)

      浏览器中url不会改变, 但是会将到这个页面(/save)的request传递到指定页面(/demo/detail), 保证数据一致性

    1
    2
    3
    4
    @RequestMapping(value="/save", method=RequestMethod.POST)
    public void save(Demo demo) {
    return "forward:/demo/detail"
    }
    • @ResponseBody

      方法上声明了@ResponseBody注解, 则会将返回的数据(String/Model)直接输出到页面中(String/JSON)

    1
    2
    3
    4
    5
    6
    @RequestMapping(value="/print")
    @ResponseBody
    public String print(){
    String message = "Hello World, Spring MVC!";
    return message;
    }

  • 返回ModelAndView

    定义ModelAndView对象并返回, 对象中可添加model数据、指定view

    ModelAndView中可以设置view, 同时也可以设置model对视图进行渲染

    1
    2
    3
    4
    5
    6
    @RequestMapping(value="/save", method=RequestMethod.POST)
    public ModelAndView save(Demo demo) {
    ModelAndView mav = new ModelAndView("hello");//实例化一个VIew的ModelAndView实例
    mav.addObject("message", "Hello World!");//添加一个带名的model对象
    return mav;
    }

  • 返回void

    对应返回的视图就是路由路径

    1
    2
    3
    4
    @RequestMapping(value="/demo/get", method=RequestMethod.GET)
    public void getDemo() {
    return; // 返回的视图名称为demo文件夹下的get.html
    }

@Controller注释的类中的方法都可以直接通过HttpServletRequest和HttpServletResponse控制request和response

1
2
3
4
5
@RequestMapping(value="/demo/get", method=RequestMethod.GET)
public void getDemo(HttpServletRequest request, HttpServletResponse response) {
// 根据HTTP协议获取及传递
return;
}

参考资料:

[1] http://www.cnblogs.com/liuwt365/p/5686659.html

[2] http://www.cnblogs.com/xiepeixing/p/4243801.html

[3] http://itroop.iteye.com/blog/263845