深入理解@RequestBody注解
我写文章历来追求通俗易懂,今天来深入探讨一下@RequestBody注解。提起这个,所有做过mvc开发的同学应该都不陌生,使用上面肯定也是信手拈来。
所以我这里就简单的提一下这个注解的使用:
1、当客户端的HTTP请求参数contentType设置为:application/json
2、服务端的处理接口参数使用:@RequestBody注解,就会把客户参数当成一个javaBean进行耦合字段赋值,简单的说就是,把客户的json对象转换为javaBean对象
好了,现在真正进入今天的主题!我们来探究一下@RequestBody注解在后台中是如何工作的呢?这个后来就是指的spring框架。先给出注解的引用包:org.springframework.web.bind.annotation.RequestBody;很明显就是属于spring框架。所以在这里,我要给大家一个提示。在spring框架的世界里面,我们一定要把的spring框架当成一个整体来看,切记切记!!!所有springframework子包里面的类都是有联系的。
ok又回到我们的主题上,在spring的世界里面,有一个最基本的东西就是拦截器。客户的每一个HTTP请求过来的时候,都会经过它的层层把控。由于平实的开发中,除非特别的功能需求我们会单独设置拦截器。其它时候都没有去注意它。但是恰恰就是我们的忽视,让我们漏掉了很多知识点。
总体的来说,在spring中,拦截器分为两大类:
一、框架自身的拦截器
二、开发者自定义的拦截器
话不多说,直接给出答案!@RequestBody注解就是spring框架自身的拦截器在起左右,当请求过来的时候,框架会检查被请求的controller方法接口中的注解,根据注解类型,调用不同的AOP处理程序进行处理。当然这里的AOP也是spring框架底层自身造已经定义好的,所以不需要我们再进行单独设置。例如这里的@RequestBody注解调用的AOP处理程序,先是通过JoinPoint获取该注解位置的参数,然后进行上面的数据耦合。看到了吧,实际上处理很简单,最主要的就是这个框架自带的AOP。
文章的结尾,我再简单提一下注解的作用,大家记住:注解是一个特殊的类,它可以给对象、参数、方法添加额外的这个类信息。说白了就是添加了更多的信息,我们可以称注解信息为元信息。我们通过java的运行时公共方法可以获取这些信息。所以,注解只有当你定义了专门的注解处理程序的时候才有用,否则一无是处!今天的文章依旧很短,但是我们希望大家可以通过这个知识点,自行开拓思路。我只是一个引路人,知识需要自己进行消化!
深入理解@RequestBody注解的更多相关文章
- @requestBody注解的使用
1.@requestBody注解常用来处理content-type不是默认的application/x-www-form-urlcoded编码的内容,比如说:application/json或者是ap ...
- springMVC中@RequestParam和@RequestBody注解的用法
springMVC中@RequestParam注解用在Controller层获解析.提取参数,当然你也可以用request.getParameter("name")来获取参数,而@ ...
- 浅谈@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别
浅谈@RequestMapping @ResponseBody 和 @RequestBody 注解的用法与区别 Spring 2.5 版本新增了注解功能, 通过注解,代码编写简化了很多:但熟悉注解的使 ...
- @RequestBody注解用法
做Java已经有8个多月了,但是基本没有学习过Java语言,因此在项目中写代码基本靠的是其他语言的基础来写Java代码,写出来的很多代码虽然能用,但是感觉很不地道,虽然从来没有同事说过,但是我自己觉得 ...
- (转)深入理解Java注解类型(@Annotation)
背景:在面试时候问过关于注解的问题,工作中也用到过该java的特性,但是也没有深入的了解. 秒懂,Java 注解 (Annotation)你可以这样学 ps:注解最通俗易懂的解释 注解是一系列元数据, ...
- 理解Java注解类型
一. 理解Java注解 注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类.而我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象$Proxy ...
- @RequestBody注解的参数仅仅读取一次的问题解决。
最近在写日志管理,想着使用拦截器加注解的方式,但是遇到了一个问题,就是如果使用@RequestBody注解接收的参数只能读取一次,造成了我在拦截器中如果接收了参数,在Controller层就接收不到了 ...
- @RequestMapping、@ResponseBody 和 @RequestBody 注解的用法与区别
背景: 帮助同事解决文件上传的bug(文件上传成功,但是页面提示上传接口异常,数据的确是插入了),从前端layui页面找错误,然后浏览器调试,找了半天无果.layui文件上传格式code返回是数值,后 ...
- 使用与不使用@RequestBody注解的区别
1. 如果使用@RequestBody接受页面参数: public Map<String,Object> insertBudget(@ApiParam(required = true,na ...
随机推荐
- Exchange 2016系统要求
一.支持的共存方案 下表列出了一些支持 Exchange 2016 与 Exchange 早期版本共存的应用场景. Exchange 2016与Exchange Server早期版本共存 Exchan ...
- SAP CRM settype的创建,背后发生了什么
来自我的同事Sara. 当我们在CRM系统里创建一个settype之后,其实系统后台悄悄的帮我们创建了很多ABAP对象,比如对应的database tables, other ABAP Diction ...
- ThinkPHP最新版本SQL注入漏洞
如下controller即可触发SQL注入: code 区域 public function test() { $uname = I('get.uname'); $u = M('user')-> ...
- 「C语言」在Windows平台搭建C语言开发环境的多种方式
新接触C语言,如何在Windows下进行C语言开发环境的搭建值得思考并整理. 以下多种开发方式择一即可(DEV C++无须环境准备). 注:本文知识来源于 Windows 平台搭建C语言集成开发环境 ...
- AngularJS中页面传参方法
1.基于ui-router的页面跳转传参 (1) 用ui-router定义路由,比如有两个页面,一个页面(producers.html)放置了多个producers,点击其中一个目标,页面跳转到对应的 ...
- Redis数据类型(下)
集合Set Redis 的集合不是 个线性结构,而是一个哈希表结构,它的内部会根据 hash 分子来 存储和查找数据,理论上 个集合可以存储 232 (大约 42 亿)个元素,因为采用哈希表结 ...
- 新建oracle实例
1.安装好ORACLE服务端.2.在开始菜单中,点击ORAHOME目录下的"Configuration and Migration Tools"下的"Database C ...
- java使用类序列化反序列化(读写文件)
创建类:Role package com.wbg.springRedis.entity; import java.io.Serializable; public class Role implemen ...
- 图片左右滚动控件(带倒影)——重写Gallery
转http://blog.csdn.net/ryantang03/article/details/8053643 今天在网上找了些资料,做了一个图片左右滚动的Demo,类似幻灯片播放,同时,图片带倒影 ...
- C# 6.0 的?.运算符
What is it? Here’s the scenario Consider getting the grandchild of a parent object like this: var g1 ...