@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事件实现代码
Mar 12 Javascript
xml和web特殊字符
Apr 28 Javascript
JavaScript 学习笔记(十一)
Jan 19 Javascript
js实现运动logo图片效果及运动元素对象sportBox使用方法
Dec 25 Javascript
JavaScript异步编程:异步数据收集的具体方法
Aug 19 Javascript
Bootstrap每天必学之警告框插件
Apr 26 Javascript
BootStrap table使用方法分析
Nov 08 Javascript
jQuery控制控件文本的长度的操作方法
Dec 05 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
Jul 06 Javascript
javascript中如何判断类型汇总
May 14 Javascript
js函数柯里化的方法和作用实例分析
Apr 11 Javascript
Vue操作Storage本地化存储
Apr 29 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
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
2015/04/26 PHP
PHP简单的MVC框架实现方法
2015/12/01 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
通过实例解析PHP数据类型转换方法
2020/07/11 PHP
JQuery 简便实现页面元素数据验证功能
2007/03/24 Javascript
jQuery前台数据获取实现代码
2011/03/16 Javascript
20行代码实现的一个CSS覆盖率测试脚本
2013/07/07 Javascript
jquery实现非叠加式的搜索框提示效果
2014/01/07 Javascript
javascript图片预加载完整实例
2015/12/10 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
2016/01/05 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
2017/12/08 Javascript
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
vue element-ui el-date-picker限制选择时间为当天之前的代码
2019/11/07 Javascript
JS运算符优先级与表达式示例详解
2020/09/04 Javascript
JS数据类型分类及常用判断方法
2020/11/19 Javascript
用vue设计一个日历表
2020/12/03 Vue.js
Python数据分析:手把手教你用Pandas生成可视化图表的教程
2018/12/15 Python
Django如何防止定时任务并发浅析
2019/05/14 Python
Python 实现遥感影像波段组合的示例代码
2019/08/04 Python
python爬虫基础知识点整理
2020/06/02 Python
python线性插值解析
2020/07/05 Python
css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局
2014/10/10 HTML / CSS
美国一家主营日韩美妆护肤品的在线商店:iMomoko
2016/09/11 全球购物
美国购买和销售礼品卡平台:Raise
2017/01/13 全球购物
西班牙太阳镜品牌:Hawkers
2018/03/11 全球购物
女士和男士时尚鞋在线购物:Shoespie
2019/02/28 全球购物
The North Face北面法国官网:美国著名户外品牌
2019/11/01 全球购物
《美丽的彩虹》教学反思
2014/02/25 职场文书
低碳环保演讲稿
2014/08/28 职场文书
暑假社会实践证明格式
2014/10/28 职场文书
工程项目经理岗位职责
2015/02/02 职场文书
2016年中秋祝酒词
2015/11/26 职场文书
Node与Python 双向通信的实现代码
2021/07/16 Javascript