get和post关于请求头中的Content-Type理解

1.get请求

GET 请求不存在请求实体部分,键值对参数放置在 URL 尾部,浏览器把form数据转换成一个字串(name1=value1&name2=value2…),然后把这个字串追加到url后面,用?分割,加载这个新的url。因此请求头不需要设置 Content-Type 字段,设置了也不会去使用。

非 ASCII 码会自动进行编码转换,例如发送请求:www.bilibili.com?hehe=你的我的

值得一提的是,GET 参数的编码方式是无法人为干涉的,这导致了不同浏览器有不同的编码方式。

2. POST 请求

Http Header里的Content-Type一般有这三种:

  • 1.application/x-www-form-urlencoded:数据被编码为名称/值对。这是标准的编码格式。默认行为。会将表单内的数据转换拼接成 key-value 对(非 ASCII 码进行编码)
  • 2.multipart/form-data(一般用来上传文件): 数据被编码为一条消息,页上的每个控件对应消息中的一个部分,必须让 表单的 enctype 等于 multipart/form-data。
  • 3.text/plain(接口测试文档里标的是raw): 数据以纯文本形式(text/json/xml/html)进行编码,其中不含任何控件或格式字符(中文不进行编码)。主要有application/json、text/xml等
 - application/json 使用application/json 这个 Content-Type
   作为响应头,用来告诉服务端消息主体是序列化后的 JSON 字符串。这种方案,可以方便的提交复杂的结构化数据,特别适合 RESTful
   的接口。
 - text/xml 使用 text/xml 这个 Content-Type 作为响应头。

3、@RequestBody和 @RequestParam不能用在同一个参数上

因为RequestBody 是获取 body里json数据,requestParam 是获取拼在url后头的参数
在这里插入图片描述

4、get post put delete方法传参区别

在 HTTP 协议中,GET 和 DELETE 请求方法通常不会使用请求体(body)来传递参数,而是通过 URL 参数来传递数据。这是因为 GET 和 DELETE 请求方法通常用于请求指定资源的表示形式或删除指定资源,而无需向服务器提交数据。如果需要传递参数,可以将参数拼接在 URL 的查询字符串中,例如:http://example.com/path/to/resource?key1=value1&key2=value2。

而 POST 和 PUT 请求方法则可以使用请求体来传递参数。在 POST 和 PUT 请求中,请求体通常包含要提交的数据。在 POST 请求中,请求体中的数据通常用于更新或创建服务器上的资源。在 PUT 请求中,请求体中的数据通常用于替换指定资源的内容或创建新的资源。请求体中的数据格式可以是多种多样的,例如 JSON、XML、表单数据等。

需要注意的是,在使用 POST 和 PUT 请求方法时,需要在请求头中指定请求体的数据格式和编码方式(Content-Type 和 Content-Encoding)。只有在请求头中指定了正确的数据格式和编码方式,服务器才能正确解析请求体中的数据。

@ModelAttribute、@RequestBody和@RequestParam是Spring MVC中常用的三个注解。

  • @ModelAttribute:用于将请求参数绑定到Controller方法参数上对应的实体类对象上,实现对象传参。一般用于表单提交场景下,可以自动封装参数到实体类。
  • @RequestBody:用于接收前端传来的json字符串,将其转换成对象,也可以用来接收表单数据,如果没有指定请求头是application/json,SpringMVC会尝试使用适合的HttpMessageConverter将请求体转换为指定的对象,主要用于接收JSON格式的请求体。
  • @RequestParam:用于从request里面接收单个请求参数的值。当请求参数的数量比较少时,或者一个请求的多个请求参数类型不一致时,可以使用该注解。

总体来说,它们的主要区别在于:

  • @ModelAttribute:将请求参数绑定到Controller方法参数对应的实体类对象上;
  • @RequestBody:接收JSON格式的请求体,可以将其转换为对象;
  • @RequestParam:从request里面接收单个请求参数的值,一般用于接收请求参数比较少的情况。

需要注意的是,它们在参数传递、数据格式处理、所需参数类型等方面有明显的区别,应根据实际的业务场景进行选择。

参考原文地址
https://blog.csdn.net/qq_22339269/article/details/103504879
https://blog.csdn.net/weixin_37909391/article/details/81218740

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值