@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 相关文章推荐
利用Ext Js生成动态树实例代码
Sep 08 Javascript
JQuery的ajax基础上的超强GridView展示
Sep 18 Javascript
说说JSON和JSONP 也许你会豁然开朗
Sep 02 Javascript
使用jQuery.fn自定义jQuery翻页插件
Jan 20 Javascript
js showModalDialog弹出窗口实例详解
Jan 07 Javascript
通过隐藏iframe实现文件下载的js方法介绍
Feb 26 Javascript
js实现分享到随页面滚动而滑动效果的方法
Apr 10 Javascript
JS实现的简洁纵向滑动菜单(滑动门)效果
Oct 19 Javascript
深入浅析JS的数组遍历方法(推荐)
Jun 15 Javascript
javascript 将共享属性迁移到原型中去的实现方法
Aug 31 Javascript
Angular.js与node.js项目里用cookie校验账户登录详解
Feb 22 Javascript
jQuery访问json文件中数据的方法示例
Jan 28 jQuery
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
IIS6的PHP最佳配置方法
2007/03/19 PHP
PHP中大于2038年时间戳的问题处理方案
2015/03/03 PHP
PHP实现生成数据字典功能示例
2018/05/24 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
2019/05/13 PHP
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
Javascript类定义语法,私有成员、受保护成员、静态成员等介绍
2011/12/08 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
jquery插件制作 表单验证实现代码
2012/08/17 Javascript
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
js有序数组的连接问题
2013/10/01 Javascript
jquery统计输入文字的个数并对其进行判断
2014/01/07 Javascript
NodeJS学习笔记之Connect中间件应用实例
2015/01/27 NodeJs
js实现当前输入框高亮显示的方法
2015/08/19 Javascript
JavaScript对象数组排序函数及六个用法
2015/12/23 Javascript
jQuery实现三级菜单的代码
2016/05/09 Javascript
angular.JS实现网页禁用调试、复制和剪切
2017/03/31 Javascript
es6学习笔记之Async函数基本教程
2017/05/11 Javascript
基于es6三点运算符的使用方法(实例讲解)
2017/10/12 Javascript
AngularJS实现的select二级联动下拉菜单功能示例
2017/10/25 Javascript
Vue打包后出现一些map文件的解决方法
2018/02/13 Javascript
vue组件内部引入外部js文件的方法
2020/01/18 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
Python修改Excel数据的实例代码
2013/11/01 Python
Python模块搜索概念介绍及模块安装方法介绍
2015/06/03 Python
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
Python3.6日志Logging模块简单用法示例
2018/06/14 Python
Python Socket编程之多线程聊天室
2018/07/28 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
Keras—embedding嵌入层的用法详解
2020/06/10 Python
Python虚拟环境的创建和包下载过程分析
2020/06/19 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
关于老式浏览器兼容HTML5和CSS3的问题
2016/06/01 HTML / CSS
求职简历的自我评价
2014/01/31 职场文书
高中语文课后反思
2014/04/27 职场文书
2015年少先队活动总结
2015/03/25 职场文书
工作态度怎么写
2015/06/25 职场文书