第四天:SpringMVC返回值的处理(重点)
SpringMVC返回值的处理
(一)返回值是字符串
1、作为视图的名称
返回值为String(返回值为 String 当前的字符串被视图解析器解析 在字符串的前后使用设定的内容进行拼接 拼接的结果为一个页面的访问路径)
@RequestMapping("r1")
public String r1() {
System.out.println("返回值为字符串");
return "success";
}
2、进行资源跳转
Servlet跳转为请求转发和重定向分别由request和response对象完成
Request.getRequestDispatcher(“路径”).forward(request,response);
Response.sendRedirect(“资源路径”);
SpringMVC是对servlet的一个扩展,所以SpringMVC的跳转方式同样也是请求转发和重定向两种方式。
(1) 重定向
@RequestMapping("r1")
public String jump1() {
System.out.println("返回值为字符串");
return "redirect:资源路径";
}
(2)请求转发
@RequestMapping("r1")
public String jump1() {
System.out.println("返回值为字符串");
return "forward:资源路径";
}
3、4.0版本的以上的重定向的传值
SpringMVC 提供了一个工具类 重定向之间可以不使用session可以共享值 使用了工具类: RedirectAttributes实现session之间的共享数据问题。
第一种方式:
@RequestMapping("test2")
public String test2(String name,RedirectAttributes ra) {
System.out.println("接受表单"+name);
//如下方法会将我们传递的参数暴露在请求地址中
ra.addAttribute("newname",name);
return "redirect:/test3";
}
ra.addAttribute("newname",name);(传递值)
@RequestParam("newname") String newname(接受值)
这种传递方式会将我们的参数暴露在请求地址中
第二种方式:
@RequestMapping("test2")
public String test2(String name,RedirectAttributes ra) {
System.out.println("接受表单"+name);
ra.addFlashAttribute("newname",name);
return "redirect:/test3";
}
ra.addFlashAttribute("newname",name);(传递值)
@ModelAttribute("newname") String newname(接受值)
该方法会隐藏传递的参数信息
(二)无返回值
控制器的方法可以设定为void 无返回值(这样的方法可以使用servlet的api进行转发或者是重定向操作,也可以使用servlet的形式进行异步请求的处理)
public void r4(){
异步返回返回数据
进行跳转
}
(三)返回其他类型数据类型
1、 返回模型视图对象
控制器的方法的返回值为ModelAndView(返回值为ModelAndView 通过这个对象包装模型数据和视图名称 被视图解析器解析,返回指定名称页面)
@RequestMapping("r2")
public ModelAndView r2() {
System.out.println("跳转过来的请求");
ModelAndView mav = new ModelAndView();
//设置视图名称
mav.setViewName("success");
//设置模型数据
mav.addObject("key","forwar跳转");
return mav;
}
2、 返回值被解析成json数据
以前我们使用的是阿里或者是谷歌的工具,进行json的处理,同时使用response对象响应到前端页面中,SpringMVC提供了一个注解 @ResponseBody 可以将我们的返回值默认的转换成一个json数据,异步的响应到前台。
@RequestMapping("showInfo")
public List<Object>showInfo() {
return 从数据库中获取的数据集合;
}