使用@Controller 注解的处理器的处理器方法,其返回值常用的有四种类型:
➢ 第一种:ModelAndView
➢ 第二种:String
➢ 第三种:无返回值 void
➢ 第四种:返回自定义类型对象
要根据不同的情况返回相应的值。
一、返回ModelAndView
-
返回数据与视图
-
适合一些处理器方法处理完后,需要跳转到其它资源,且又要在跳转的资源间传递数据
-
返回ModelAndView对象需要处理器方法中定义 ModelAndView 对象。
-
使用**addobject(名称,内容)添加返回的数据,使用setViewName(全路径返回视图或视图逻辑名称)**返回视图。
注:视图逻辑名称是指配置过视图解析器的
-
@RequestMapping("/returnModelAndView.do") public ModelAndView returnModelAndView(){ ModelAndView mv = new ModelAndView();//创建ModelAndView对象 mv.addObject("msg","返回ModelAndView");//返回数据 mv.setViewName("show");//返回页面 return mv; }
二、返回String
-
返回String时有两种情况,返回视图或返回字符串
-
返回视图
-
@RequestMapping("/returnStringView.do") public String returnStringView(HttpServletRequest request,String name, Integer age){ request.setAttribute("name",name);//返回数据 request.setAttribute("age",age); request.setAttribute("msg","通过视图解析器返回的页面"); //返回页面 return "show"; }
-
直接return "全路径返回视图或视图逻辑名称"
-
也可以把数据传回到页面,通过作用域request、session、application等返回
-
-
返回字符串
-
@RequestMapping(value = "/returnStringData.do" ,produces = "text/plain;charset=utf-8") @ResponseBody public String returnStringData(String name,Integer age){ return "返回String数据\nname:"+name+"\nage:"+age; }
-
只需要在方法上面添加一个
@ResponseBody
注解即可 -
注:加入
produces = "text/plain;charset=utf-8"
是因为直接返回字符串会乱码,加了就不了
-
三、无返回值Void
-
对于处理器方法返回 void 的应用场景,AJAX 响应,需要手动响应。用的少,了解即可。
比如处理器对请求处理后,无需跳转到其它任何资源,此时可以让处理器方法返回 void。 -
@RequestMapping("/returnVoidAjax.do") public void returnVoidAjax(HttpServletResponse response,String name,Integer age) throws IOException { //创建Student对象 Student student = new Student(); student.setName(name); student.setAge(age); //使用jackson工具把student对象转成json格式 ObjectMapper om = new ObjectMapper(); String json= om.writeValueAsString(student); //使用HttpServletResponse把数据传输到浏览器 response.setContentType("application/json;charset=utf-8");//设置编码 PrintWriter pw = response.getWriter(); pw.println(json); //打开资源 pw.flush(); //关闭资源 pw.close(); }
-
需要在pom.xml文件中加入 jackson 依赖
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency>
四、返回自定义类型对象
-
这个用的最多,可以返回各式各样的内容,例如Integer、String、list集合、自定义对象、Map等等
-
返回的对象不是作为逻辑视图出现的,而是作为直接在页面显示的数据出现的。
返回对象,需要使用@ResponseBody 注解,将转换后的 JSON 数据放入到响应体中。 -
也是响应ajax,不过可以用框架响应ajax,比手动响应简便非常多
-
也需要在pom.xml文件中加入jackson依赖
-
例如,返回一个自己写好的java对象Student
@RequestMapping("/returnStudentJsonObject.do") @ResponseBody public Student returnStudentJsonObject(String name, Integer age){ Student student = new Student(); student.setName(name); student.setAge(age); return student; }