@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 相关文章推荐
js取滚动条的尺寸的函数代码
Nov 30 Javascript
基于bootstrap3和jquery的分页插件
Jul 31 Javascript
JS实现双击屏幕滚动效果代码
Oct 28 Javascript
第十章之巨幕页头缩略图与警告框组件
Apr 25 Javascript
常用原生JS兼容性写法汇总
Apr 27 Javascript
Javascript类型系统之String字符串类型详解
Jun 21 Javascript
很棒的js选项卡切换效果
Jul 15 Javascript
JavaScript中的call和apply的用途以及区别
Jan 11 Javascript
js原生日历的实例(推荐)
Oct 31 Javascript
如何以Angular的姿势打开Font-Awesome详解
Apr 22 Javascript
基于纯JS实现多张图片的懒加载Lazy过程解析
Oct 14 Javascript
JavaScript享元模式原理与用法实例详解
Mar 09 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
php数组函数序列之array_sum() - 计算数组元素值之和
2011/10/29 PHP
Laravel 5.0 发布 新版本特性详解
2015/02/10 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
YII2框架中使用RBAC对模块,控制器,方法的权限控制及规则的使用示例
2020/03/18 PHP
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
浅谈JavaScript中运算符的优先级
2015/07/07 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
AngularJs  Creating Services详解及示例代码
2016/09/02 Javascript
jQuery密码强度验证控件使用详解
2017/01/05 Javascript
AngularJS constant和value区别详解
2017/02/28 Javascript
vue用addRoutes实现动态路由的示例
2017/09/15 Javascript
pm2发布node配置文件ecosystem.json详解
2019/05/15 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
layui的面包屑或者表单不显示的解决方法
2019/09/05 Javascript
React学习之JSX与react事件实例分析
2020/01/06 Javascript
js实现div色块碰撞
2020/01/16 Javascript
JavaScript TAB栏切换效果的示例
2020/11/05 Javascript
详解ES6 中的Object.assign()的用法实例代码
2021/01/11 Javascript
约瑟夫问题的Python和C++求解方法
2015/08/20 Python
用python找出那些被“标记”的照片
2017/04/20 Python
利用Python批量提取Win10锁屏壁纸实战教程
2018/03/27 Python
Python3 集合set入门基础
2020/02/10 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
阿根廷旅游网站:almundo阿根廷
2018/02/12 全球购物
JAVA中的关键字有什么特点
2014/03/07 面试题
函授自我鉴定
2013/11/06 职场文书
企业宣传方案
2014/03/04 职场文书
婚礼主持词
2014/03/13 职场文书
新学期教师寄语
2014/04/02 职场文书
《闻一多先生的说和做》教学反思
2014/04/28 职场文书
市级青年文明号申报材料
2014/05/26 职场文书
年终奖发放方案
2014/06/02 职场文书
2015年体育教学工作总结
2015/05/20 职场文书
接触艺术对孩子学习思维有益
2019/08/06 职场文书
SpringBoot 整合mongoDB并自定义连接池的示例代码
2022/02/28 MongoDB