@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 键盘keyCode键码值表
Dec 24 Javascript
[JSF]使用DataModel处理表行事件的实例代码
Aug 05 Javascript
javascript正则表达式之search()用法实例
Jan 19 Javascript
jquery滚动加载数据的方法
Mar 09 Javascript
jquery树形菜单效果的简单实例
Jun 06 Javascript
AngularJS之页面跳转Route实例代码
Mar 10 Javascript
使用JavaScript开发跨平台的桌面应用详解
Jul 27 Javascript
vue axios同步请求解决方案
Sep 29 Javascript
微信小程序实现顶部下拉菜单栏
Nov 04 Javascript
深度了解vue.js中hooks的相关知识
Jun 14 Javascript
JavaScript eval()函数定义及使用方法详解
Jul 07 Javascript
解决vue页面渲染但dom没渲染的操作
Jul 27 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
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
PHP判断上传文件类型的解决办法
2015/10/20 PHP
基于CI框架的微信网页授权库示例
2016/11/25 PHP
统计PHP目录中的文件数方法
2019/03/05 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
入门基础学习 ExtJS笔记(一)
2010/11/11 Javascript
JS中如何设置readOnly的值
2013/12/25 Javascript
优化javascript的执行效率一些方法总结
2013/12/25 Javascript
jquery each的几种常用的使用方法示例
2014/01/21 Javascript
javascript时间函数大全
2014/06/30 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
javascript实现在网页中运行本地程序的方法
2016/02/03 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
canvas实现动态小球重叠效果
2017/02/06 Javascript
Nodejs中使用captchapng模块生成图片验证码
2017/05/18 NodeJs
JS实现简单表格排序操作示例
2017/10/07 Javascript
vue.js中npm安装教程图解
2018/04/10 Javascript
详解vue文件中使用echarts.js的两种方式
2018/10/18 Javascript
vue 动态创建组件的两种方法
2020/12/31 Vue.js
python正则表达式修复网站文章字体不统一的解决方法
2013/02/21 Python
Python入门篇之文件
2014/10/20 Python
解决Python中由于logging模块误用导致的内存泄露
2015/04/23 Python
Python实现查找匹配项作处理后再替换回去的方法
2017/06/10 Python
Window10+Python3.5安装opencv的教程推荐
2018/04/02 Python
谈一谈基于python的面向对象编程基础
2019/05/21 Python
Python3 tkinter 实现文件读取及保存功能
2019/09/12 Python
Python for循环搭配else常见问题解决
2020/02/11 Python
Python学习之time模块的基本使用
2021/01/17 Python
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
会计系中文个人求职信
2013/12/24 职场文书
2014年酒店工作总结与计划
2014/11/17 职场文书
nginx简单配置多个server的方法
2021/03/31 Servers
python模块与C和C++动态库相互调用实现过程示例
2021/11/02 Python
python图像处理 PIL Image操作实例
2022/04/09 Python