@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刷新框架子页面的七种方法代码
Nov 20 Javascript
JavaScript写的一个自定义弹出式对话框代码
Jan 17 Javascript
做好七件事帮你提升jQuery的性能
Feb 06 Javascript
js+div实现图片滚动效果代码
Feb 10 Javascript
node.js应用后台守护进程管理器Forever安装和使用实例
Jun 01 Javascript
JavaScript访问CSS属性的几种方式介绍
Jul 21 Javascript
Javascript BOM学习小结(六)
Nov 26 Javascript
javascript拖拽效果延伸学习
Apr 04 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
Nov 25 Javascript
基于AGS JS开发自定义贴图图层
Mar 31 Javascript
jQuery简单实现向列表动态添加新元素的方法示例
Dec 25 jQuery
微信小程序实现多选功能
Nov 04 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
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
php格式化时间戳
2016/12/17 PHP
PHP7新增函数
2021/03/09 PHP
JQuery跨Iframe选择实现代码
2010/08/19 Javascript
IE无法设置短域名下Cookie
2010/09/23 Javascript
jQuery 关于伪类选择符的使用说明
2013/04/24 Javascript
jquery validate添加自定义验证规则(验证邮箱 邮政编码)
2013/12/04 Javascript
JQuery中extend使用介绍
2014/03/13 Javascript
js实现仿QQ秀换装效果的方法
2015/03/04 Javascript
介绍JavaScript中Math.abs()方法的使用
2015/06/14 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
jQuery Easyui快速入门教程
2016/08/21 Javascript
JQuery validate 验证一个单独的表单元素实例
2017/02/17 Javascript
JavaScript关联数组用法分析【概念、定义、遍历】
2017/03/15 Javascript
一个手写的vue放大镜效果
2019/08/09 Javascript
关于JSON解析的实现过程解析
2019/10/08 Javascript
Python引用(import)文件夹下的py文件的方法
2014/08/26 Python
在Django的上下文中设置变量的方法
2015/07/20 Python
Python的requests网络编程包使用教程
2016/07/11 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
python实现雨滴下落到地面效果
2018/06/21 Python
Linux下python3.6.1环境配置教程
2018/09/26 Python
Django组件之cookie与session的使用方法
2019/01/10 Python
解决pycharm每次新建项目都要重新安装一些第三方库的问题
2019/01/17 Python
python 多个参数不为空校验方法
2019/02/14 Python
Python调用C语言的实现
2019/07/26 Python
HTML5网页音乐播放器的示例代码
2017/11/09 HTML / CSS
Nike挪威官网:Nike.com (NO)
2018/11/26 全球购物
阿里巴巴美国:Alibaba美国
2019/11/24 全球购物
美国环保妈妈、儿童和婴儿用品购物网站:The Tot
2019/11/24 全球购物
Hotels.com韩国:海外国内旅行所需的酒店和住宿预订网站
2020/05/08 全球购物
医学院学生的自我评价分享
2013/11/19 职场文书
省优秀教师事迹材料
2014/01/30 职场文书
幼儿园辞职信范文
2015/02/27 职场文书
关于maven依赖 ${xxx.version}报错问题
2022/01/18 Java/Android