@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 相关文章推荐
SyntaxHighlighter语法高亮插件使用说明
Aug 14 Javascript
iframe子页面与父页面在同域或不同域下的js通信
May 07 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
Sep 05 Javascript
vue实现可增删查改的成绩单
Oct 27 Javascript
浅谈EasyUi ComBotree树修改 父节点选择的问题
Nov 07 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
Feb 10 Javascript
JS动态添加的div点击跳转到另一页面实现代码
Sep 30 Javascript
jQuery实现表单动态添加数据并提交的方法
Jul 19 jQuery
js时间戳转yyyy-MM-dd HH-mm-ss工具类详解
Apr 30 Javascript
vue视频播放暂停代码
Nov 08 Javascript
vue3.0中使用postcss-pxtorem的具体方法
Nov 20 Javascript
Vue SPA 首屏优化方案
Feb 26 Vue.js
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
全国FM电台频率大全 - 10 江苏省
2020/03/11 无线电
一个阿拉伯数字转中文数字的函数
2006/10/09 PHP
破解图片防盗链的代码(asp/php)测试通过
2010/07/02 PHP
修改php.ini不生效问题解决方法(上传大于8M的文件)
2013/06/14 PHP
解析PHP高效率写法(详解原因)
2013/06/20 PHP
Javascript引用指针使用介绍
2012/11/07 Javascript
Javascript小技巧之生成html元素
2014/05/15 Javascript
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
jQuery统计上传文件大小的方法
2015/01/24 Javascript
javascript+HTML5的canvas实现七夕情人节3D玫瑰花效果代码
2015/08/04 Javascript
基于JavaScript实现的希尔排序算法分析
2017/04/14 Javascript
详解Vue.js 2.0 如何使用axios
2017/04/21 Javascript
node+express框架中连接使用mysql(经验总结)
2018/11/10 Javascript
微信小程序dom操作的替代思路实例分析
2018/12/06 Javascript
可能被忽略的一些JavaScript数组方法细节
2019/02/28 Javascript
浅谈JS中this在各个场景下的指向
2019/08/14 Javascript
Vue路由对象属性 .meta $route.matched详解
2019/11/04 Javascript
Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
2020/04/27 Javascript
[02:41]DOTA2英雄基础教程 谜团
2013/12/10 DOTA
[01:06]DOTA2隆重推出2016冬季勇士令状 内含上海特级锦标赛互动指南
2016/02/17 DOTA
Python的requests网络编程包使用教程
2016/07/11 Python
Python如何读取MySQL数据库表数据
2017/03/11 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
python爬虫爬取淘宝商品信息(selenum+phontomjs)
2018/02/24 Python
python+POP3实现批量下载邮件附件
2018/06/19 Python
简单了解Django ContentType内置组件
2019/07/23 Python
python  logging日志打印过程解析
2019/10/22 Python
Django restful framework生成API文档过程详解
2020/11/12 Python
基于CSS3实现的几个小loading效果
2018/09/27 HTML / CSS
THE OUTNET美国官网:国际设计师品牌折扣网站
2017/03/07 全球购物
GoPro摄像机美国官网:美国运动相机厂商
2018/07/03 全球购物
心理学专业大学生职业生涯规划范文
2014/02/19 职场文书
运动会口号大全
2014/06/07 职场文书
尼克胡哲观后感
2015/06/08 职场文书
Nginx URL重写rewrite机制原理及使用实例
2021/04/01 Servers