@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 相关文章推荐
JavaScript 私有成员分析
Jan 13 Javascript
javascript 同时在IE和FireFox获取KeyCode的代码
Feb 07 Javascript
Jquery对数组的操作技巧整理
Mar 25 Javascript
最新最热最实用的15个jQuery插件汇总
Jul 05 Javascript
JavaScript实现的选择排序算法实例分析
Apr 14 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
Dec 20 Javascript
vue2中使用less简易教程
Mar 27 Javascript
JS实现调用本地摄像头功能示例
May 18 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
Jul 05 Javascript
Angular6 写一个简单的Select组件示例
Aug 20 Javascript
如何手动实现es5中的bind方法详解
Dec 07 Javascript
javascript操作向表格中动态加载数据
Aug 27 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控制网页过期时间的代码
2008/09/28 PHP
php 计算两个时间戳相隔的时间的函数(小时)
2009/12/18 PHP
sphinx增量索引的一个问题
2011/06/14 PHP
ueditor 1.2.6 使用方法说明
2013/07/24 PHP
PHP+Mysql+jQuery中国地图区域数据统计实例讲解
2015/10/10 PHP
PHP 接入支付宝即时到账功能
2016/09/18 PHP
jQuery的运行机制和设计理念分析
2011/04/05 Javascript
JSONP 跨域共享信息
2012/08/16 Javascript
js实现透明度渐变效果的方法
2015/04/10 Javascript
JavaScript数组去重的两种方法推荐
2016/04/05 Javascript
JavaScript知识点总结(十)之this关键字
2016/05/31 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
JS基于递归实现倒计时效果的方法
2016/11/26 Javascript
Angularjs 动态改变title标题(兼容ios)
2016/12/29 Javascript
前端框架学习总结之Angular、React与Vue的比较详解
2017/03/14 Javascript
浅析node Async异步处理模块用例分析及常用方法介绍
2017/11/17 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
JS面向对象编程基础篇(三) 继承操作实例详解
2020/03/03 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
2020/05/11 Javascript
JS使用for in有序获取对象数据
2020/05/19 Javascript
区分vue-router的hash和history模式
2020/10/03 Javascript
Python Sql数据库增删改查操作简单封装
2016/04/18 Python
深入学习Python中的装饰器使用
2016/06/20 Python
python3读取excel文件只提取某些行某些列的值方法
2018/07/10 Python
Python SQL查询并生成json文件操作示例
2018/08/17 Python
Python实现字典按key或者value进行排序操作示例【sorted】
2019/05/03 Python
python 将日期戳(五位数时间)转换为标准时间
2019/07/11 Python
Pytorch学习之torch用法----比较操作(Comparison Ops)
2020/06/28 Python
通俗易懂了解Python装饰器原理
2020/09/17 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
html5 Web SQL Database 之事务处理函数transaction与executeSQL解析
2013/11/07 HTML / CSS
Clarks鞋澳大利亚官方网站:Clarks Australia
2019/12/25 全球购物
印度第一网上礼品店:IGP.com
2020/02/06 全球购物
中医临床专业自我鉴定范文
2014/01/15 职场文书
幼师自我鉴定
2014/02/01 职场文书
家长对老师的评语
2014/04/18 职场文书