处理器方法的返回值

  使用@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("xx",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("xx1",21));
  36. map.put("person2", new Person("xx2",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("xx1",21));
  47. list.add(new Person("xx2",22));
  48. list.add(new Person("xx3",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>

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

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

    1.返回void -Ajax请求 后台: 前台: 返回object中的数值型: 返回object中的字符串型: 返回object中的自定义类型对象: 返回object中的list: 返回object中 ...

  2. 《SpringMVC从入门到放肆》十一、SpringMVC注解式开发处理器方法返回值

    上两篇我们对处理器方法的参数进行了分别讲解,今天来学习处理器方法的返回值. 一.返回ModelAndView 若处理器方法处理完后,需要跳转到其它资源,且又要在跳转资源之间传递数据,此时处理器方法返回 ...

  3. 10.SpringMVC注解式开发-处理器方法的参数

    1.逐个参数接收 只要保证请求参数名与该请求处理方法的参数名相同即可 // 请求参数名 与该处理器中的请求方法的参数名相同 ,即可接收前台传递过来的参数 public ModelAndView met ...

  4. 9.SpringMVC注解式开发-处理器的请求映射规则的定义

    1.对请求URI的命名空间的定义 @RequestMapping的value属性用于定义所匹配请求的URI.但对于注解在方法上和注解在类上, 其value 属性 所指定的URI,意义是不同的 一个@C ...

  5. SpingMVC注解式开发-处理器方法的参数(形参request等)

    HttpServletRequest HttpServletResponse HttpSession 请求中所携带的请求参数

  6. 3.2.3 SpringMVC注解式开发

    SpringMVC注解式开发 1. 搭建环境 (1) 后端控制器无需实现接口 , 添加相应注解 Controller类添加注解 @Controller //该注解表将当前类交给spring容器管理 @ ...

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

    上一篇我们结束了配置式开发,配置式开发目前在企业中用的并不是很多,大部分企业都在使用注解式开发,所以今天我们就来学习注解式开发.所谓SpringMVC注解式开发是指,处理器是基于注解的类的开发方式.对 ...

  8. SpringMVC 注解式开发

    SpringMVC的注解式开发是指,处理器是基于注解的类的开发.对于每一个定义的处理器,无需再配置文件中逐个注册,只需在代码中通过对类与方法的注解,便可完成注册.即注解替换是配置文件中对于处理器的注册 ...

  9. 《SpringMVC从入门到放肆》九、SpringMVC注解式开发(简单参数接收)

    上一篇我们学习了注解式开发的配置方式并写了一个小Demo跑起来.今天我们来学习注解开发的参数接收.处理器方法中的常用参数有五类,这些参数会在系统调用时由系统自动赋值,即程序员可以在方法中直接使用.具体 ...

随机推荐

  1. Qt编写安防视频监控系统10-视频轮询

    一.前言 视频轮询在视频监控系统中是一个基础的核心功能,尤其是上了大屏以后,这个功能是必须的,根据预先设定的轮询间隔逐个加载视频到预先设定的通道画面数中,轮询间隔.轮询画面数.轮询采用的码流类型(主码 ...

  2. JS中的prototype、__proto__与constructor(图解)

    作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞 ...

  3. Java8 根据对象某个属性值去重

    list中的对象某个属性存在重复时将重复的对象去重 //根据skuAttrValueName值去重 List<SkuValue> uniqueSkuValues = skuValues.s ...

  4. xdebug调试的原理

    转自 https://segmentfault.com/a/1190000002528341 使用PhpStorm+xdebug单步调试程序可以快速帮助自己熟悉项目代码! 运行原理 在实际使用前,我们 ...

  5. linux基本防护措施,权限分配和提高防护安全

    设置用户失效 1.失效的用户将无法登录 使用chage命令将用户zhangsan的账户设为当前已失效(比如已经过去的某个时间): [root@proxy ~]# useradd zhangsan [r ...

  6. 01.04 linux命令(2

    ======================Linux下的用户管理==============用户信息保存/etc/passwd ,一般用户都有读的权限真正的用户:修改密码,可以登录伪用户:应用程序在 ...

  7. Git速成学习第六课:Bug分支

    Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 当你接到一个修复代码为101的任务的时候,很自然的你想创建一个分支issue-101来修复它,但 ...

  8. jackson 实体转json 为NULL或者为空不参加序列化【转载】

    原博客:https://www.cnblogs.com/yangy608/p/3936848.html 1.实体上 /** * 将该标记放在属性上,如果该属性为NULL则不参与序列化 * 如果放在类上 ...

  9. 日期控件传到后台异常。日期数据格式是 Date 还是 String?

    问题:日期控件的时间,传到Controller层直接异常. 前台日期格式:YYYY/MM/DD,后台Java定义的时间类型:Date. 解决: 方法一:原因是Controller层的参数类型定义为 D ...

  10. Spring A 标签链接使用

    1.示例 <a th:href="@{/edit/{id}(id=${user.id})}">修改</a> 以@开头前面的{id}是占位符,后面的(id=$ ...