浅谈springMVC中controller的几种返回类型
Controller方法的返回值可以有以下几种:
1、返回ModelAndView
返回ModelAndView时最常见的一种返回结果。需要在方法结束的时候定义一个ModelAndView对象,并对Model和View分别进行设置。
2、返回String
1):字符串代表逻辑视图名
真实的访问路径=“前缀”+逻辑视图名+“后缀”
注意:如果返回的String代表逻辑视图名的话,那么Model的返回方式如下:
publicStringtestController(Modelmodel){ model.addAttribute(attrName,attrValue);//相当于ModelAndView的addObject方法 return"逻辑视图名"; }
2):代表redirect重定向
redirect的特点和servlet一样,使用redirect进行重定向那么地址栏中的URL会发生变化,同时不会携带上一次的request
案例:
publicStringtestController(Modelmodel){ return"redirect:path";//path代表重定向的地址 }
3):代表forward转发
通过forward进行转发,地址栏中的URL不会发生改变,同时会将上一次的request携带到写一次请求中去
案例:
publicStringtestController(Modelmodel){ return"forward:path";//path代表转发的地址 }
3、返回void
返回这种结果的时候可以在Controller方法的形参中定义HTTPServletRequest和HTTPServletResponse对象进行请求的接收和响应
1)使用request转发页面
request.getRequestDispatcher("转发路径").forward(request,response);
2)使用response进行页面重定向
response.sendRedirect("重定向路径");
3)也可以使用response指定响应结果
response.setCharacterEncoding("UTF-8"); response.setContentType("application/json;charset=utf-8"); response.getWriter.write("json串");
以上三种返回值没有什么重要和不重要的分别,一般来说都会使用到,只不过有的时候使用的方式会有一些细微的差别
补充:SpringMvc中,Controller方法的多种实现方式(指定返回到哪个页面,指定返回到页面的数据)
1)ModelAndView
@RequestMapping("/list") publicModelAndViewitemsList()throwsException{ Listlist=itmesService.list(); //创建ModelAndView视图 ModelAndViewmodelAndView=newModelAndView(); //将list数据添加到试图里 modelAndView.addObject("itemList",list); modelAndView.setViewName("itemList");//设置视图的名称,即返回到哪个页面 //由于有视图解析器的作用,省去了前缀和后缀,其实访问的页面为("/WEB-INF/jsp/itemList.jsp") returnmodelAndView; }
2)String(最常用,最方便,建议)
@RequestMapping("/itemEdit/{id}") publicStringitemEdit(@PathVariable("id")Integerid,HttpServletRequestreuqest, Modelmodel)throwsException{ //StringidStr=reuqest.getParameter("id"); Itemsitems=itmesService.findItemsById(id); //将items数据加到视图中 model.addAttribute("item",items); //这里返回editItem,在@Controller的注解下,回自动添加前缀和后缀,实则是返回到页面("/WEB-INF/jsp/editItem.jsp") return"editItem"; }
3)返回void
publicvoidupdate(Itemsitems,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{ //返回数据,将items的内容放入items里,jsp页面调用items就行 request.setAttribute("items",items); //返回指定的页面 //如果是void类型的话,就不会去调用SpringMvc的架构,因此无法自动加载视图解析器,所以跳转的 //网页名称应该为其全路径名称 request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request,response); } 就不会去调用SpringMvc的架构,因此无法自动加载视图解析器,所以跳转的 //网页名称应该为其全路径名称 request.getRequestDispatcher("/WEB-INF/jsp/success.jsp").forward(request,response); }
4)关于方法中所需要的参数定义
举3)中的例子,我在update方法中定义了:
Itemsitems,HttpServletRequestrequest,以及HttpServletResponseresponse这三个类型.
但是大家可以发现,其实我在方法中是没有用到response的,因此,可以把其删掉,对于程序来说,并不会
产生影响。
因此,大家在定义方法的时候,可以根据自己的实际需要来定义所需要的类,或者大家怕以后代码需要改麻烦的话,
全部定义上也是可以的。
更新
5)若如果想要接口不是跳转页面,而是返回数据,则需要添加@ResponseBody的注解
例:
@RequestMapping("atimynyc/getUser") @ResponseBody publicUsergetUser(Stringid){ Useruser=newUser(); user.setUserName="Atimynyc"; user.setUserAge=18; user.setUserPhone="123456789"; returnUser; }
通过加上ResponseBody,springmvc就知道该接口是返回数据,例,当我们用ajax调用上面的接口url时atimynyc/getUser,就可以获得user这个对象。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持毛票票。如有错误或未考虑完全的地方,望不吝赐教。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。