@RequestBody和@ResponseBody原理解析

时间:2024-03-29 07:47:20

最近写了一些博客,发现对自己和大家还是有很大的帮助的。

今天就来看一下@RequestBody和@ResponseBody原理解析

一)首先说明xia @requestBody与@requestParam的区别

  spring的RequestParam注解接收的参数是来自于requestHeader中,即请求头。都是用来获取请求路径(url )中的动态参数。也就是在url中,格式为xxx?username=123&password=456。功能与@pathvarible。

RequestBody注解接收的参数则是来自于requestBody中,即请求体中。

默认的情况下从前台往后台传值,我们可以用对象去接受,而不用request对象(当然request也可以,但是比较麻烦,还需要进行类型的转换),后台传值方式如下。

@RequestBody和@ResponseBody原理解析

有没有想过,为什么会这样。前台提交的数据,可以直接转换为对象?什么格式的能转化为对象?

无论是采用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和@ResponseBody原理解析

加上@RequestBody,就会自动将json数据转化为对象(实体类)

@ResponseBody

@ResponseBody就是和RequestBody差不多,@ResponseBody是将对转化为json格式,由于后台返回数据,而@RequestBody是前台json数据转化为对象,用于前台提交数据

@ResponseBody使用注意事项

@RequestBody和@ResponseBody原理解析

[email protected]不能自动实现将对象转化为Json格式,需要用JSONObject对象转换一下。

2.方法返回值应为:String

@RequestBody使用注意事项

一般前台请求用ajax

@RequestBody和@ResponseBody原理解析

1..设置dataType为json

2.设置contentType为:application/json

以上就是我的学习总结,可能有些没想到,不过,对于大家理解,是没有什么问题得。有什么问题,欢迎大家留言探讨!

如果想更深入的学习,可以看看一下连接,我觉得写的不错

https://mp.weixin.qq.com/s?__biz=MzI4NjI2OTYwNg==&mid=2247485125&idx=1&sn=38829b3170262564e155385fe7c2c86d&chksm=ebdecf0cdca9461a994ec2bfe0ec2fa27d7e25f4df1cfe2c7833a0e74442280a0787eca504b8&mpshare=1&scene=22&srcid=&sharer_sharetime=1585702082458&sharer_shareid=e7e7510f81f2b91f3b1263d0a3ba80c1#rd