Get,Post,@RequestParam,@RequestBody 之间区别联系

Get ,Post 之间区别:
get一般用于获取数据 ,反复读取不应该对数据有副作用,即幂等。可以对get请求的数据做缓存。

post 一般用于提交数据,是不幂等的,无法对post请求做缓存,比如post请求创建书签。

get请求数据一般放在url 后querystring中,但也可以放在body 中,post 请求数据一般放在body体中,但也可以放在url 后queryString 中。比如ElasticSearch的_search api就用了带body的get;也可以自己开发接口让post一半的参数放在url的querystring里,另外一半放body里;甚至还可以让所有的参数都放Header里,只要请求的客户端和服务器端能够约定好。

通常get请求数据放在url 中 ,post 请求放在body中,相对来说post比get安全些 。但是从攻击的角度,无论是GET还是POST都不够安全,因为HTTP本身是明文协议。每个HTTP请求和返回的每个byte都会在网络上明文传播,不管是url,header还是body。要保证安全,Htpps 是最基本要求。

http 协议对get,post请求参数长度都没有限制。只是浏览器会对get请求做限制,避免过长的请求url占用服务资源。

get请求会产生一次tcp包,post请求会产生两次tcp包。浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok。默认这样请求,因为一般post 请求体比较大,先发送hearder去服务端验证过再传输data,减少资源浪费。

我们开发中一般按照REST规范:get获取数据,post提交创建资源,put更新数据,delete 删除数据。

@Requestparam 和@Requestbody 区别:

@Requestparam 用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容。(Http协议中,如果不指定Content-Type,则默认传递的参数就是application/x-www-form-urlencoded类型)。RequestParam可以接受简单类型的属性,也可以接受对象类型。实质是将Request.getParameter() 中的Key-Value参数Map利用Spring的转化机制ConversionService配置,转化成参数接收对象或字段。

@RequestBody接收的参数是来自requestBody中,即请求体。一般用于处理非 Content-Type: application/x-www-form-urlencoded编码格式的数据,比如:application/json、application/xml等类型的数据

在get请求中,不能使用@RequestBody。 post请求,可以使用@RequestBody和@RequestParam,一个请求中可以存在多个@RequestParam,@RequestBody只有一个。

开发中一般在get请求中用@RequestParam 接受参数比较少的请求,参数拼接在url中。复杂数据封装为实体类使用post请求放在body体中以json格式发送。

原文地址:https://www.cnblogs.com/wlong-blog/p/14941673.html