@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 相关文章推荐
jQuery总体架构的理解分析
Mar 07 Javascript
js获取url中的参数且参数为中文时通过js解码
Mar 19 Javascript
Javascript基础教程之定义和调用函数
Jan 18 Javascript
Javascript基础教程之函数对象和属性
Jan 18 Javascript
js数组去重的hash方法
Dec 22 Javascript
javascript正则表达式模糊匹配IP地址功能示例
Jan 06 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
Mar 07 Javascript
node.js中实现kindEditor图片上传功能的方法教程
Apr 26 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
Jan 18 Javascript
vue实现div拖拽互换位置
Jul 29 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
Sep 27 Javascript
使用typescript快速开发一个cli的实现示例
Dec 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
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
PHP中trait使用方法详细介绍
2017/05/21 PHP
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
jQuery实现鼠标滑过遮罩并高亮显示效果
2013/07/16 Javascript
Jquery实现显示和隐藏的4种简单方式
2013/08/28 Javascript
JS随机漂浮广告代码具体实例
2013/11/19 Javascript
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
自己实现ajax封装示例分享
2014/04/01 Javascript
js限制文本框只能输入数字方法小结
2014/06/16 Javascript
理解jQuery stop()方法
2014/11/21 Javascript
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
JavaScript 数组中最大最小值
2016/06/05 Javascript
jquery 属性选择器(匹配具有指定属性的元素)
2016/09/06 Javascript
BootStrap实现手机端轮播图左右滑动事件
2016/10/13 Javascript
jQuery双向列表选择器select版
2016/11/01 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
JavaScript中boolean类型之三种情景实例代码
2016/11/21 Javascript
微信小程序之ES6与事项助手的功能实现
2016/11/30 Javascript
基于BootStrap栅格栏系统完成网站底部版权信息区
2016/12/23 Javascript
Vue实现表格中对数据进行转换、处理的方法
2018/09/06 Javascript
jquery实现动态创建form并提交的方法示例
2019/05/27 jQuery
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
2020/02/10 Javascript
es6中let和const的使用方法详解
2020/02/24 Javascript
详解Nuxt内导航栏的两种实现方式
2020/04/16 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
2020/04/30 Javascript
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
python3获取当前目录的实现方法
2019/07/29 Python
Probikekit欧盟:在线公路自行车专家
2019/07/12 全球购物
介绍下WebSphere的安全性
2013/01/31 面试题
软件测试有哪些?什么是配置项?
2012/02/12 面试题
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
2013/07/02 面试题
人事主管岗位职责范本
2013/12/04 职场文书
高中学生自我评价范文
2014/09/23 职场文书
退休欢送会主持词
2015/07/01 职场文书
详解overflow:hidden的作用(溢出隐藏、清除浮动、解决外边距塌陷)
2021/07/01 HTML / CSS