@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 相关文章推荐
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
Feb 15 Javascript
javascript 复杂的嵌套环境中输出单引号和双引号
May 26 Javascript
jquery实现心算练习代码
Dec 06 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
Jun 09 Javascript
浅析javascript操作 cookie对象
Dec 26 Javascript
JavaScript自定义分页样式
Jan 17 Javascript
Javascript中数组去重与拍平的方法示例
Feb 03 Javascript
微信小程序中post方法与get方法的封装
Sep 26 Javascript
浅谈react受控组件与非受控组件(小结)
Feb 09 Javascript
详解VUE项目中安装和使用vant组件
Apr 28 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
May 06 Javascript
基于vue与element实现创建试卷相关功能(实例代码)
Dec 07 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
PHP备份数据库生成SQL文件并下载的函数代码
2012/02/05 PHP
yii实现级联下拉菜单的方法
2014/07/31 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
2015/07/28 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
Firebug 字幕文件JSON地址获取代码
2009/10/28 Javascript
js 兼容多浏览器的回车和鼠标焦点事件代码(IE6/7/8,firefox,chrome)
2010/04/14 Javascript
javaScript如何处理从java后台返回的list
2014/04/24 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
2014/06/09 Javascript
JavaScript简介
2015/02/15 Javascript
jquery插件uploadify实现带进度条的文件批量上传
2015/12/13 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
JS仿Base.js实现的继承示例
2017/04/07 Javascript
Vuex之理解Mutations的用法实例
2017/04/19 Javascript
xmlplus组件设计系列之选项卡(Tabbar)(5)
2017/05/03 Javascript
原生js FileReader对象实现图片上传本地预览效果
2020/03/27 Javascript
利用node.js爬取指定排名网站的JS引用库详解
2017/07/25 Javascript
vue.js实现二级菜单效果
2019/10/19 Javascript
微信小程序绘制半圆(弧形)进度条
2020/11/18 Javascript
vue脚手架项目创建步骤详解
2021/03/02 Vue.js
[31:01]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS Orenda
2014/05/23 DOTA
[01:21:36]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python实现学生成绩管理系统
2020/04/05 Python
flask使用session保存登录状态及拦截未登录请求代码
2018/01/19 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
2018/02/08 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
2018/02/26 Python
pandas数据预处理之dataframe的groupby操作方法
2018/04/13 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
2019/06/18 Python
Python 常用日期处理 -- calendar 与 dateutil 模块的使用
2020/09/02 Python
夜班门卫岗位职责
2013/12/09 职场文书
信息技术专业个人自我评价
2013/12/11 职场文书
幼儿园小班家长寄语
2014/04/02 职场文书
2014年班组长工作总结
2014/11/20 职场文书
2015年八一建军节活动总结
2015/03/20 职场文书
2015年机关后勤工作总结
2015/05/26 职场文书
事业单位岗位说明书
2015/10/08 职场文书
vue配置型表格基于el-table拓展之table-plus组件
2022/04/12 Vue.js