最近写了一些博客,发现对自己和大家还是有很大的帮助的。
今天就来看一下@RequestBody和@ResponseBody原理解析
一)首先说明xia @requestBody与@requestParam的区别
spring的RequestParam注解接收的参数是来自于requestHeader中,即请求头。都是用来获取请求路径(url )中的动态参数。也就是在url中,格式为xxx?username=123&password=456。功能与@pathvarible。
RequestBody注解接收的参数则是来自于requestBody中,即请求体中。
默认的情况下从前台往后台传值,我们可以用对象去接受,而不用request对象(当然request也可以,但是比较麻烦,还需要进行类型的转换),后台传值方式如下。
有没有想过,为什么会这样。前台提交的数据,可以直接转换为对象?什么格式的能转化为对象?
无论是采用get方式提交的,还是通过post这种方式提交的,他的数据格式丢失和Content-Type有关的,常见的Content-Type类型如下
几种常见的Content-Type
application/x-www-form-urlencoded
application/x-www-form-urlencoded主要用于表单形式的POST请求中,如普通的表单提交,或者js发包,默认都是通过这种方式,可以使用Postman来发一个这种类型请求:
application/json
application/json是POST请求以JSON的格式向服务请求发起请求或者请求返回JSON格式的响应内容,服务端接受到数据后对JSON进行解析拿到所需要的参数,同样适用Postman模拟一个请求:
multipart/form-data
multipart/form-data是使用POST请求上传文件,如果上传照片,文件等,由于很多情况下都会有批量上传,为了区分不同的数据,multipart/form-data的类型有boundary参数进行分割,对上传文件请求抓包,request头部信息如下:
@RequestBody
当Content-Type为application/x-www-form-urlencoded或者multipart/form-data时
默认的数格式是: a=123&b=123&c=123
用get提交,和post提交是一样的,数据格式都是这样,get和post的区别是,get显示地址栏中,post提交是不显示的,相对于get来说,post这种提交方式更加安全
如果说是 a=123&b=123&c=123这种格式的话。,spring会自动的去转成对象的格式
当Content-Type为application/json时
此时的数据格式是json格式:{“a”,“b”,“c”,“d”}。
那么这种格式的话,Spring就无法自动转化为对象,那么如何解决呢?
加上@RequestBody,就会自动将json数据转化为对象(实体类)
@ResponseBody
@ResponseBody就是和RequestBody差不多,@ResponseBody是将对转化为json格式,由于后台返回数据,而@RequestBody是前台json数据转化为对象,用于前台提交数据
@ResponseBody使用注意事项
[email protected]不能自动实现将对象转化为Json格式,需要用JSONObject对象转换一下。
2.方法返回值应为:String
@RequestBody使用注意事项
一般前台请求用ajax
1..设置dataType为json
2.设置contentType为:application/json
以上就是我的学习总结,可能有些没想到,不过,对于大家理解,是没有什么问题得。有什么问题,欢迎大家留言探讨!
如果想更深入的学习,可以看看一下连接,我觉得写的不错