spring controller 返回页面的几种方法以及如何携带返回数据

一、返回String类型

1、controller注解为@Controller时

1)方法注解为@ResponseBody时

返回的是return的字符串数据,包括json字符串。当然前端需要通过

data = eval("(" + data + ")");

解析json字符串为json对象。 

2)return "/index"时

会自动查找 根目录/resources/templates 目录下面的index.html文件,templates是安全目录,必须通过控制层访问,不能直接访问。如果该文件夹下面还有文件夹,则类似这样访问 return "/order/orderList"。

传输数据可通过方法带参 Model model,或者ModelMap model,又或者Map map,然后

model.addAttribute("msg","返回消息");
//map.put("msg","返回消息");

3)return "redirect:/index"

重定向,默认访问public公共目录,比如static路径下的静态文件,或比如已经如 2)定义过的公开访问路径。

传输数据可通过方法带参 RedirectAttributes redirectAttributes, 然后

redirectAttributes.addFlashAttribute("msg","返回消息");

但是要注意,返回的数据是带在URL里面的。 

4)return "forward:/index"

请求转发,默认访问public公共目录,比如static路径下的静态文件,或比如已经如 2)定义过的公开访问路径。

传输数据可通过方法带参 RedirectAttributes redirectAttributes, 然后

redirectAttributes.addFlashAttribute("msg","返回消息");

但是要注意,返回的数据是带在URL里面的。 

2、controller注解为@RestController时

return字符串都认为是返回字符串数据,相当于同时增加了@Controller和@ResponseBody注解。

二、返回非String对象

1、例外情况

此时controller注解为@Controller还是@RestController返回页面都是一样的效果。但如果单单是@RestController或者@Controller和@ResponseBody一起,return如java bean实例、Map实例、List实例等,返回的都是json字符串。

2、返回 ModelAndView

可以方法带参 ModelAndView mv,然后

mv.addObject("msg","返回数据");
mv.setViewName("index");//返回页面为index.html

返回页面效果与返回数据和第一条第2点相当,但是,如果写成

mv.addObject("msg","返回数据");
mv.setViewName("redirect:/login");//login必须是已经定义的路径

返回数据的效果与第一条第3点相当,也是URL带返回数据。

三、无返还值

1、请求转发和重定向,传参参考默认servlet

//请求转发
request.getRequestDispatcher("/login").forward(resquest,response);
//重定向
response.sendRedirect("/index");

你可能感兴趣的:(spring,spring,java)