@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 相关文章推荐
javascript 解析后的xml对象的读取方法细解
Jul 25 Javascript
js对象与打印对象分析比较
Apr 23 Javascript
删除节点的jquery代码
Jan 13 Javascript
jQuery实现图片文字淡入淡出效果
Dec 21 Javascript
ES6通过babel转码使用webpack使用import关键字
Dec 13 Javascript
js数组与字符串常用方法总结
Jan 13 Javascript
详解js的异步编程技术的方法
Feb 09 Javascript
jQuery中用on绑定事件时需注意的事项
Mar 19 Javascript
JS交互点击WKWebView中的图片实现预览效果
Jan 05 Javascript
原生javascript自定义input[type=radio]效果示例
Aug 27 Javascript
js实现无缝轮播图
Mar 09 Javascript
vue 在methods中调用mounted的实现操作
Aug 07 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
[转帖]PHP世纪万年历
2006/12/06 PHP
使用TinyButStrong模板引擎来做WEB开发
2007/03/16 PHP
PHP 模拟登陆MSN并获得用户信息
2009/05/16 PHP
如何获知PHP程序占用多少内存(memory_get_usage)
2012/09/23 PHP
ThinkPHP使用Ueditor的方法详解
2016/05/20 PHP
PHP批量修改文件名称的方法分析
2017/02/27 PHP
js控制框架刷新
2008/08/01 Javascript
JQuery 将元素显示在屏幕的中央的代码
2010/02/27 Javascript
jQuery基础知识filter()和find()实例说明
2010/07/06 Javascript
js 中{},[]中括号,大括号使用详解
2011/05/12 Javascript
jquery异步请求实例代码
2011/06/21 Javascript
js中的scroll和offset 使用比较的实例与分析
2013/09/29 Javascript
使用jQuery的attr方法来修改onclick值
2014/07/07 Javascript
javascript获取元素离文档各边距离的方法
2015/02/13 Javascript
JavaScript核心语法总结(推荐)
2016/06/02 Javascript
AngularJS 单元测试(二)详解
2016/09/21 Javascript
通过扫描二维码打开app的实现代码
2016/11/10 Javascript
Bootstrap table两种分页示例
2016/12/23 Javascript
浅谈函数调用的不同方式,以及this的指向
2017/09/17 Javascript
Vue项目部署的实现(阿里云+Nginx代理+PM2)
2019/03/26 Javascript
在Vue环境下利用worker运行interval计时器的步骤
2019/08/01 Javascript
用vue设计一个日历表
2020/12/03 Vue.js
利用Python中的pandas库对cdn日志进行分析详解
2017/03/07 Python
python常用知识梳理(必看篇)
2017/03/23 Python
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
给海归自荐信的建议
2013/12/13 职场文书
2014年扶贫帮困工作总结
2014/12/09 职场文书
学校国庆节活动总结
2015/03/23 职场文书
2015年团支部工作总结
2015/04/03 职场文书
仓库统计员岗位职责
2015/04/14 职场文书
2016教师党员学习心得体会
2016/01/21 职场文书
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android