11.SpringMVC注解式开发-处理器方法的返回值

处理器方法的返回值

  使用@Controller 注解的处理器的处理器方法,其返回值常用的有四种类型

  1.ModelAndView

  2.String

  3.void

  4.自定义类型对象

1.返回ModelAndView

  若处理器方法处理完后,需要跳转到其他资源,且又要在跳转的资源间传递数据,此时处理器方法

  返回ModelAndView比较好。当然,若要返回ModelAndView,则处理器方法中需要定义ModelAndView对象

  在使用时,若该处理器方法只是进行跳转而不传递数据或只是传递数据而不向任何资源跳转(如对页面的Ajax异步响应)

  此时若返回ModelAndView,则将总是有一部分多余:要么Model多余,要么View多余。即此时返回ModelAndView 不合适

2.返回String

  1.返回内部资源逻辑视图名

  2.返回View对象名

 1 // 返回 内部资源逻辑视图名 (若只跳转不返回数据,则可以直接使用 String 作为返回值)
 2     @RequestMapping(value = "/returnString1.do")
 3     public String method() {
 4         return "/WEB-INF/jsp/hello.jsp"; // 注册了 视图解析器 之后,好像就只能去 return 视图对象的
 5                                             // id名,才能找到对应的视图
 6     }
 7
 8     // 返回 外部资源逻辑视图名 (需 注册一个 视图解析器 。并定义id 为 taobao 的视图对象)
 9     @RequestMapping(value = "/returnString2.do")
10     public String method2() {
11         return "taobao";
12     }

3.返回void:
  对于处理器方法返回void的应用场景,主要有两种:

  1.通过ServletAPI 传递数据并完成跳转

  2.AJAX 响应

 1 // 返回 void ,通过 servlet里面的 API 完成数据的处理和跳转
 2     @RequestMapping(value = "/returnVoid.do")
 3     public void method3(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
 4         request.setAttribute("name", "xzk");
 5         request.getRequestDispatcher("/WEB-INF/jsp/hello.jsp").forward(request, response);
 6     }
 7
 8     //返回 void ,通过AJAX 进行异步请求相应,不需要指定返回的视图,会自动返回到请求的页面
 9     @RequestMapping(value = "/ajax.do")
10     public void method4(String name,int age,HttpServletResponse response) throws IOException {
11         //处理器对于 AJAX 请求中所提交的参数,可以使用逐个接受的方式,也可以以对象的方式整体接收。只要保证AJAX请求参数与接收对象的属性名称一致
12         Map<String, Object> map = new HashMap<String, Object>();
13         //数据存储到 Map 中
14         map.put("name", name);
15         map.put("age", age);
16
17         //将 map 转为 JSON
18         JSONObject jsonObject = JSONObject.fromObject(map);
19         //得到JSON字符串
20         String jsonStr = jsonObject.toString();
21         //将数据发回客户端(json字符串)
22
23         PrintWriter out = response.getWriter();
24         out.print(jsonStr);
25         out.close();
26     }

 

4.返回Object

  处理器方法也可以放回Object 对象。但返回的这个Object对象不是作为逻辑视图出现的,

  而是作为直接在页面显示的数据出现的

  返回Object对象,需要使用 @ResponseBody 注解,将转换后的JSON数据放入到响应体中

  环境搭建:1.导入Jar包    2.注册注解驱动

 1 @Controller
 2 @RequestMapping("/test")
 3 public class MyController {
 4
 5     // 返回 Obejct ,但返回的这个Object对象
 6     // 不是作为逻辑视图出现的,而是作为直接在页面显示的数据出现的(需要将Object转成JSON给浏览器页面,所以需要 jackson
 7     // jar包)(为什么JSONObject 不可以呢,因为SpringMVC会自动去调jackson,是配套的,而不会自己去调用JSONObject吧,)
 8     // 返回 Object 对象 ,需要使用 @ResponseBody 注解 ,将转换后的JSON数据 放入到响应体 中
 9     @RequestMapping(value = "/ajax.do")
10     @ResponseBody
11     public Object method() {
12         return 99.99;
13     }
14
15     //返回字符串对象 (如果里面包含中文,需要使用  produces 来 限制输出结果的类型 )
16     @RequestMapping(value = "/ajaxString.do",produces="text/html;charset=utf-8")
17     @ResponseBody
18     public String method2() {
19         return "99.99 字符";
20     }
21
22     //返回自定义类型对象
23     @RequestMapping(value = "/ajaxPerson.do")
24     @ResponseBody
25     public Person method3() {
26
27         return new Person("徐泽昆",20);
28     }
29
30     //返回Map集合
31     @RequestMapping(value = "/ajaxMap.do")
32     @ResponseBody
33     public Map<String,Object> method4() {
34         Map<String,Object> map = new HashMap<String,Object>();
35         map.put("person1", new Person("徐泽昆1",21));
36         map.put("person2", new Person("徐泽昆2",22));
37
38         return map;
39     }
40
41     //返回List 集合
42     @RequestMapping(value = "/ajaxList.do")
43     @ResponseBody
44     public List<Person> method5() {
45         List<Person> list = new ArrayList<Person>();
46         list.add(new Person("徐泽昆1",21));
47         list.add(new Person("徐泽昆2",22));
48         list.add(new Person("徐泽昆3",23));
49         return list;
50     }
51 }
 1 <script type="text/javascript">
 2
 3         $(function() {
 4         /* 按钮的 点击响应事件 */
 5             $("button").click(function() {
 6                 $.ajax({
 7                     //ajax 默认的请求方式是 GET,get方式 我们的 Spring 字符拦截器拦截不到,所以在这里设置成Post
 8                     type:"post",
 9                     //url:"test/ajax.do",
10                     //url:"test/ajaxString.do",
11                     //url:"test/ajaxPerson.do",
12                     //url:"test/ajaxMap.do",
13                       url:"test/ajaxList.do",
14                     //后台处理成功后,会自动返回到 这里,(这里交流的方式是通过 json 字符串,给后台的是json,返回来的也是json)
15                     success:function(data){
16                         //遍历这个 List 集合
17                         $(data).each(function(index) {
18                             alert(data[index].username + "    " + data[index].age);
19                         });
20                     }
21                 });
22             });
23         });
24     </script>
时间: 2024-11-02 11:00:22

11.SpringMVC注解式开发-处理器方法的返回值的相关文章

springmvc 注解式开发 处理器方法的返回值

1.返回void -Ajax请求 后台: 前台:

《SpringMVC从入门到放肆》八、SpringMVC注解式开发(基本配置)

上一篇我们结束了配置式开发,配置式开发目前在企业中用的并不是很多,大部分企业都在使用注解式开发,所以今天我们就来学习注解式开发.所谓SpringMVC注解式开发是指,处理器是基于注解的类的开发方式.对于每一个定义的处理器,无需在配置文件中逐个注册,只需在代码中通过对类与方法的注解,便可完成注册. 一.注册组件扫描器 这里说的组件即处理器,需要指定处理器所在的基本包. <?xml version="1.0" encoding="UTF-8"?> <b

SpringMVC07处理器方法的返回值

<body> <!--返回值是string的内部视图 --> <a href="user/add">add</a> <!--返回值是string的外部视图 --> <a href="user/taobao">淘宝</a> <!--没有返回值 转发到内部视图 --> <a href="user/request">request</a&g

处理器方法的返回值

1.Object @RequestMapping("/first") @ResponseBody public Object doOne(){ return 1; } @RequestMapping(value = "/second",produces = "text/html;charset=utf-8") @ResponseBody public Object sss(){ return "就业"; } @RequestM

springmvc学习笔记(11)-springmvc注解开发之简单参数绑定

springmvc学习笔记(11)-springmvc注解开发之简单参数绑定 springmvc学习笔记11-springmvc注解开发之简单参数绑定 spring参数绑定过程 默认支持的类型 简单类型 pojo绑定 自定义参数绑定实现日期类型绑定 springmvc和struts2的区别 本文主要介绍注解开发的简单参数绑定,包括简单类型.简单pojo以及自定义绑定实现类型转换 spring参数绑定过程 从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到contro

006 注解式开发springmvc

一. 概述 在我们日常的开发之中,我们最为常用的就是使用注解式开发springmvc. 在前面我们基本讲到了springmvc的基本原理,但是还有一些组件需要在后面结合才能完成讲解. 注解式开发的的核心 : [1]URL映射 [2]参数映射 [3]视图映射 [4]域对象处理 [5]参数转换器 [6]异常处理器 [7]拦截器 等等, 二 . 注解式开发学习的问题 我们学习注解式开发的时候,最容易出现的一个问题就是被很多的注解混淆了我们最初学习的目的. 按照上面的部分,我们在每一个部分都会学习几个注

springmvc注解式控制器简介

一.Spring2.5之前,我们都是通过实现Controller接口或其实现来定义我们的处理器类.已经@Deprecated. 二.Spring2.5引入注解式处理器支持,通过@Controller 和 @RequestMapping注解定义我们的处理器类.并且提供了一组强大的注解: 需要通过处理器映射DefaultAnnotationHandlerMapping和处理器适配器AnnotationMethodHandlerAdapter来开启支持@Controller 和@RequestMapp

13.MyBatis注解式开发

mybatis 的注解,主要是用于替换映射文件.而映射文件中无非存放着增.删.改.查 的 SQL 映射标签.所以,mybatis 注解,就是要替换映射文件中的 SQL 标签. mybatis 官方文档中指出,若要真正想发挥 mybatis 功能,还是要用映射文件.即 mybatis官方并不建议通过注解方式来使用 mybatis. 注解的基础知识: 注解的基础语法 A.注解后是没有分号的. B.注解首字母是大写的,因为注解与类.接口是同一级别的.一个注解,后台对应着 一个@interface 类.

Android应用插件式开发解决方法[转]

一.现实需求描述 一般的,一个Android应用在开发到了一定阶段以后,功能模块将会越来越多,APK安装包也越来越大,用户在使用过程中也没有办法选择性的加载自己需要的功能模块.此时可能就需要考虑如何分拆整个应用了. 二.解决方案提出 一般有两种方式,一种是将应用按照功能分拆成多个应用,用户需要哪个就下载哪个,都需要就都下载.应用之间,可以在代码层面做一定的关联,以共享部分信息.另一种方式,类似于其他平台插件的方式,用户可以在主应用中可以选择性的下载需要的插件,不需要该功能,则不需要下载. 第一种