"Content-Type" 是HTTP请求头中的一个标头,用于指示请求或响应中包含的实体的媒体类型。它告诉客户端如何处理响应中的数据,并通知服务器客户端正在发送的数据类型。它可以出现在请求或响应标头中。 |
常见的Content-Type类别
Content-Type的值通常由一个媒体类型和一个可选的字符集组成,例如 “Content-Type: text/html; charset=UTF-8”
常见的 Content-Type 类型:
text/plain:纯文本
text/html:HTML格式
application/json:JSON数据格式
application/xml:XML数据格式
application/x-www-form-urlencoded:普通表单格式(键值对)
multipart/form-data:多部分表单格式(用于文件上传)
image/jpeg:JPEG图片格式
image/png:PNG图片格式
audio/mpeg:MPEG音频格式
video/mp4:MP4视频格式
application/octet-stream:二进制流数据格式
HTTP规范还支持其他多种媒体类型,具体取决于实际需要。当客户端发送请求时,它必须设置Content-Type
头以告知服务器发送的数据类型。而服务器返回的响应也必须设置Content-Type
头以告知客户端响应数据的类型。
后端如何接收参数
SpringBoot后端接收参数的方式有以下几种:
- @PathVariable:用于接收Get请求通过拼接url传递的参数,例如localhost:7001/param/123
- @RequestParam:用于接收Get请求通过查询字符串传递的参数,例如localhost:7001/param?id=123
- @RequestBody:用于接收Post请求通过请求体传递的参数,可以是JSON或表单格式
- @RequestHeader:用于接收请求头部传递的参数
1.@RequestBody
@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的),对于get方法来说是没有请求体的,所以一般都是使用post请求方式时使用这种方式传参。
如果参数时放在请求体中,并且Content-Type为application/json,那么后台要用@RequestBody才能接收到;
如果不是放在请求体中的话,那么后台接收前台传过来的参数时,要用@RequestParam来接收,或则形参前 什么也不写也能接收。
@PostMapping("/example")
public String handleFormSubmit(@RequestBody User user) {
// 处理表单提交数据
}
@RequestBody会自动将请求体中的json数据封装进User实体类中。json的key和实体类的属性名一一对应。
2.@RequestParam
@RequestParam注解通常用于接收前端传递的URL参数或表单参数。这些参数可以通过HTTP GET请求的URL参数或HTTP POST请求的表单参数进行传递。
1.Query参数:即URL中的查询参数,例如
http://example.com/path?param1=value1¶m2=value2
在这种情况下,@RequestParam注解会将查询参数的值与方法参数进行绑定。例如:
@GetMapping("/example")
public String example(@RequestParam("param1") String param1, @RequestParam("param2") String param2) {
// method body
}
2.Form表单参数:即表单提交时的参数,例如通过application/x-www-form-urlencoded格式以Post
方式的提交的表单。在这种情况下,@RequestParam注解会将表单参数的值与方法参数进行绑定。例如:
@PostMapping("/example")
public String example(@RequestParam("param1") String param1, @RequestParam("param2") String param2) {
// method body
}
另外,如果通过application/x-www-form-urlencoded格式提交的表单,也可以将其直接封装成Java类,此时参数前不需要加任何注解即可。
@PostMapping("/example")
public String example(Param param) {
// method body
}
注:如果是通过json
传递的表单数据,则必须加@RequestBody
才能将其转成Java类
需要注意的是,使用@RequestParam注解时需要指定参数的名称,这个名称要和前端传递参数时的名称一致。如果前端传递参数时使用了不同的名称,可以通过@RequestParam注解的value属性或name属性来指定正确的参数名称。 |
post和get提交表单的区别
- 对于HTTP GET请求提交的表单,表单参数通常会被编码到URL中,形成类似于以下的URL
http://example.com/api/example?id=123&name=John
这种直接使用@RequestParam接收参数,但是如果参数较多,可以使用Java类接收
//使用@RequestParam接收单个参数
@PostMapping("/example")
public String example(@RequestParam("param1") String param1, @RequestParam("param2") String param2) {
// method body
}
//使用Java类接收参
@PostMapping("/example")
public String example(User user) {
// method body
}
public class User{
String id;
String name;
}
2.对于post提交的表单,格式可以有多种,这里主要说一下application/x-www-form-urlencoded和application/json两种格式
(1)"application/x-www-form-urlencoded"格式
这是一种常用的表单格式,也是浏览器默认使用的表单格式。在这种格式下,表单数据会被放置在HTTP请求的正文中,也就是请求体中。正文内容由键值对组成,每个键值对之间用&符号连接例如:
POST /example HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
id=123&name=John&age=20
接收这种格式的参数,可以使用@RequestParam接收,也可以使用Java类接收,因为是application/x-www-form-urlencoded格式,使用Java类不需要加@RequestBody,和上面接收get表单方法一致。
(2)"application/json"格式
这是一种常用的数据交换格式,它使用JSON格式来描述数据。在这种格式下,表单数据会被序列化为JSON字符串,并放置在HTTP请求的正文中。例如:
{
"id": 123,
"name": "John",
"age": 20
}
可以使用@RequestBody注解来接收这种格式的表单数据,并将其反序列化为Java对象。此时Java对象前必须加@RequestBody注解才行。