@ResponseBody 和 @RequestBody 注解的区别


Posted in Javascript onMarch 08, 2017

@ResponseBody 和 @RequestBody 注解的区别

1 前言

在详述 @ResponseBody 和 @RequestBody 注解之前,咱先了解一下 @RequestMapping 注解,@RequestMapping 是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径;用于方法上,表示在类的父路径下追加方法上注解中的地址将会访问到该方法。例如.

/**
* 用于类上,可以没有
*/

@RequestMapping(value = "/controllerDemo")
public class ControllerDemo {
  // 用于方法上,必须有
  @RequestMapping(value = "/methodDemo")
  public String methodDemo() {
    return "helloWorld";
  }
}

其对应的 action 就是“ action = controllerDemo/methodDemo ”。因此,在本地访问 http://localhost:8080/controllerDemo/methodDemo 就会返回(跳转)到“ helloWorld.jsp ”页面。

2 注解详述

在本部分,作者将详细介绍 @ResponseBody 和 @RequestBody 注解的区别:

  1. @Responsebody 注解表示该方法的返回的结果直接写入 HTTP 响应正文(ResponseBody)中,一般在异步获取数据时使用;
  2. 在使用 @RequestMapping 后,返回值通常解析为跳转路径,加上 @Responsebody 后返回结果不会被解析为跳转路径,而是直接写入HTTP 响应正文中。例如,异步获取 json 数据,加上 @Responsebody 注解后,就会直接返回 json 数据。
  3. @RequestBody 注解则是将 HTTP 请求正文插入方法中,使用适合的 HttpMessageConverter 将请求体写入某个对象。

例如,

@RequestMapping(value = "person/login")
@ResponseBody
public Person login(@RequestBody Person person) {  // 将请求中的 datas 写入 Person 对象中
  return person;  // 不会被解析为跳转路径,而是直接写入 HTTP 响应正文中
}

页面异步请求:

function login() {
  var datas = '{"name":"' + $('#name').val() + '","id":"' + $('#id').val() + '","status":"' + $('#status').val() + '"}';
  $.ajax({
    type : 'POST',
    contentType : 'application/json',
    url : "${pageContext.request.contextPath}/person/login",
    processData : false,
    dataType : 'json',
    data : datas,
    success : function(data) {
      alert("id: " + data.id + "name: " + data.name + "status: "+ data.status);
    },
    error : function() {
      alert('Sorry, it is wrong!');
    }
  });
};

3 扩展

接下来,在介绍一个 @PathVariable 注解,其用来获取请求路径(url )中的动态参数。例如,

/**
* @RequestMapping(value = "/person/profile/{id}/{name}/{status}") 中的 {id}/{name}/{status}
* 与 @PathVariable int id、@PathVariable String name、@PathVariable boolean status
* 一一对应,按名匹配。
*/

@RequestMapping(value = "person/profile/{id}/{name}/{status}")
@ResponseBody
public Person porfile(@PathVariable int id, @PathVariable String name, @PathVariable boolean status) {
  return new Person(id, name, status);
}

页面异步请求:

function profile() {
  var url = "${pageContext.request.contextPath}/person/profile/";
  var query = $('#id').val() + '/' + $('#name').val() + '/' + $('#status').val();
  url += query;
  $.get(url, function(data) {
    alert("id: " + data.id + "name: " + data.name + "status: "
        + data.status);
  });
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

Javascript 相关文章推荐
jquery自动完成插件(autocomplete)应用之PHP版
Dec 15 Javascript
深入理解JavaScript定时机制
Oct 29 Javascript
javascript 利用Image对象实现的埋点(某处的点击数)统计
Dec 28 Javascript
jquery实现盒子下拉效果示例代码
Sep 12 Javascript
jquery cookie的用法总结
Nov 18 Javascript
jQuery模拟黑客帝国矩阵效果实例
Jun 28 Javascript
详解JavaScript的回调函数
Nov 20 Javascript
JS实现图片的不间断连续滚动的简单实例
Jun 03 Javascript
关于javascript的一些知识以及循环详解
Sep 12 Javascript
JavaScript实现简单音乐播放器
Apr 17 Javascript
vue动态注册组件实例代码详解
May 30 Javascript
express框架中使用jwt实现验证的方法
Aug 25 Javascript
js/jq仿window文件夹框选操作插件
Mar 08 #Javascript
js实现上下左右弹框划出效果
Mar 08 #Javascript
浅谈JavaScript正则表达式-非捕获性分组
Mar 08 #Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
Mar 08 #Javascript
原生js实现瀑布流布局
Mar 08 #Javascript
js仿拉勾网首页穿墙广告效果
Mar 08 #Javascript
JavaScript中的工厂函数(推荐)
Mar 08 #Javascript
You might like
跟我学Laravel之请求(Request)的生命周期
2014/10/15 PHP
超级酷和最实用的jQuery实例收集(20个)
2010/04/21 Javascript
flexigrid 类似ext grid的JS表格代码
2010/07/17 Javascript
jQuery 获取URL的GET参数值的小例子
2013/04/18 Javascript
页面刷新时记住滚动条的位置jquery代码
2014/06/17 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
JavaScript实现数组在指定位置插入若干元素的方法
2015/04/06 Javascript
JS获取数组最大值、最小值及长度的方法
2015/11/24 Javascript
JS上传图片预览插件制作(兼容到IE6)
2016/08/07 Javascript
BootStrapTable 单选及取值的实现方法
2017/01/10 Javascript
JS实现京东首页之页面顶部、Logo和搜索框功能
2017/01/12 Javascript
Vue指令的钩子函数使用方法
2017/03/20 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
2017/05/13 jQuery
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
JQuery Ajax动态加载Table数据的实例讲解
2018/08/09 jQuery
详解从react转职到vue开发的项目准备
2019/01/14 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
2020/05/27 Javascript
微信小程序之导航滑块视图容器功能的实现代码(简单两步)
2020/06/19 Javascript
Nuxt.js 静态资源和打包的操作
2020/11/06 Javascript
Python中类的继承代码实例
2014/10/28 Python
Python中operator模块的操作符使用示例总结
2016/06/28 Python
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
Python实现的连接mssql数据库操作示例
2018/08/17 Python
Python3爬虫使用Fidder实现APP爬取示例
2018/11/27 Python
使用python将图片按标签分入不同文件夹的方法
2018/12/08 Python
Django框架实现的普通登录案例【使用POST方法】
2019/05/15 Python
实例详解python函数的对象、函数嵌套、名称空间和作用域
2019/05/31 Python
python 扩展print打印文件路径和当前时间信息的实例代码
2019/10/11 Python
HTML5新增加的功能详解
2016/09/05 HTML / CSS
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
清洁工岗位职责
2014/01/29 职场文书
工作失职检讨书(精华篇)
2014/10/15 职场文书
学习群众路线的心得体会
2014/11/05 职场文书
2015年小学图书室工作总结
2015/05/18 职场文书
健康教育主题班会
2015/08/14 职场文书
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android