同步请求的返回值类型 :

void : 啥也不返回

String :表示逻辑视图名

ModelAndView:该对象既有逻辑视图名,还可以携带去页面要展示的数据

同步请求:如何将controller层的数据携带到页面上。

    1.使用ModelAndView作为方法的返回值类型

    2.使用Map、Model、ModelMap、类型的参数  在前端页面用el表达式取值即可

注意:无论使用ModelAndView还是放到Map ,中springmvc底层都会把数据放发request域中

从域中取值

${username} 全域查找 默认从最小的域查找pageScope-->requestScope-->sessionScope-->ApplicationScope.

${requestScope.username}

@RequestMapping("testResponse")
public ModelAndView testResponse(){
ModelAndView mv = new ModelAndView("result")
Book book = new Book();
book.setBookName("活着");
book.setPrice(89);
mv.addObject("books", book);
//插入的数据也可以是调用的数据库的数据
return mv;
}

2.Map类型的参数 。使用的时候 用String类型的返回值即可

@RequestMapping("testResponse")
public String testResponse(Map<String,Object> map){
map.put("userName", "张三");
return "result";
}
//在前端页面用el表达式取出即可

3.Model参数 和使用ModelMap 一样  使用的时候 用String类型的返回值即可

@RequestMapping("testResponse")
public String testResponse(Model model){
model.addAttribute("username","张三");
return "result"; }

二、异步请求:Json

返回异步请求的数据 ,几乎各种数据都可以异步返回

Map-------------------->转化之后成为 json对象

对象、   --------------------->转化为json对象

对象列表(对象List)     ------->转化后成为json数组

true

@responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后,写入到response对象的body区,通常用来返回JSON数据或者是XML

数据,需要注意的呢,在使用此注解之后不会再走试图处理器,而是直接将数据写入到输入流中,他的效果等同于通过response对象输出指定格式的数据

controller 如何返回json数据:

1.导入json的包

2.在controller加一个@responseBody注解

3.在springmvc.xml中配置<mvc:annotation-driven/>

1.使用Map方式发送json数据

    @RequestMapping("/json1")
@ResponseBody
public Map testJson1(){
Map map = new HashMap();
map.put("username","李四");
map.put("age","19");
return map;
//此处的map 是new创建出来的 不是接收参数的那个map 那是同步请求操作用的 异步用new
}
{"age":"19","username":"李四"}  
Map类型的通过转化之后 自动转化为 对象的格式!!

2.对象类型的转化json   也转化成json对象的格式

    @RequestMapping("/json2")
@ResponseBody
public Book testJson2(){
Book book = new Book();
book.setBid(1);
book.setName("春暖花开");
book.setPrice(200.22);
return book;
}
{"bid":1,"name":"春暖花开","price":200.22}

3.对象列表(list) 转化为json之后  转化为json数组的形式

    @RequestMapping("/json3")
@ResponseBody
public List<Book> testJson3(){
List<Book> list = new ArrayList<Book>(); //往List列表放两个对象
Book book = new Book();
book.setBid(1);
book.setName("春暖花开");
book.setPrice(200.22);
list.add(book); Book book1 = new Book();
book1.setBid(2);
book1.setName("天龙八部");
book1.setPrice(250.22);
list.add(book1);
return list;
}
[{"bid":1,"name":"春暖花开","price":200.22},{"bid":2,"name":"天龙八部","price":250.22}]

三、使用原生API

只需要在目标方法的参数上直接声明即可

   @RequestMapping("/testRawApi")
public String testRawApi(HttpServletRequest request, HttpServletResponse response, HttpSession session){
System.out.println(request);
System.out.println(response);
System.out.println(session);
return "index";
}

最新文章

  1. List接口方法使用(PS:Java 编程思想阅读小结)
  2. TestNG官方文档中文版(3)-testng.xml
  3. .net重启iis线程池和iis站点程序代码【转】
  4. NYOJ-235 zb的生日 AC 分类: NYOJ 2013-12-30 23:10 183人阅读 评论(0) 收藏
  5. 【trim()】去掉字符串开头和结尾的空格,防止不必要的空格导致的错误。
  6. new Thread的弊端(转)
  7. android 小结
  8. compact_op.go
  9. R语言预测实战(游浩麟)笔记1
  10. react源码第一天
  11. 格式化hdfs后,hadoop集群启动hdfs,namenode启动成功,datanode未启动
  12. 【读书笔记】iOS-动态类型和动态绑定
  13. topcoder srm 530 div1
  14. WIN10下 VS2017+OpenCv 3.4.1 配置
  15. apply和call用法
  16. 2018.06.29 NOIP模拟 1807(简单递推)
  17. 有序列表ol和定义列表dl,dt,dd
  18. BZOJ 3173 最长上升子序列(树状数组+二分+线段树)
  19. vue二级路由跳转后外部引入js失效问题解决方案
  20. java并发容器

热门文章

  1. 跳转控制语句return
  2. echarts画环形图
  3. Socket网络通信编程(一)
  4. 进阶1:Linux 环境准备_ 设置网络IP_安装火狐浏览器
  5. Oracle--SQL程序优化案例一
  6. rm命令反向选择删除文件
  7. leetcode 46 全排列 (python)
  8. 在静态页面中使用 Vue.js
  9. 006-Spring Boot自动配置-Condition、Conditional、Spring提供的Conditional自动配置
  10. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_04 数据结构_4_数据结构_链表