博客原文地址
"Content-Type" 是HTTP请求头中的一个标头,用于指示请求或响应中包含的实体的媒体类型。它告诉客户端如何处理响应中的数据,并通知服务器客户端正在发送的数据类型。它可以出现在请求或响应标头中。
Content-Type的值通常由一个媒体类型和一个可选的字符集组成,例如 “Content-Type: text/html; charset=UTF-8”
常见的 Content-Type 类型:
HTTP规范还支持其他多种媒体类型,具体取决于实际需要。当客户端发送请求时,它必须设置Content-Type头以告知服务器发送的数据类型。而服务器返回的响应也必须设置Content-Type头以告知客户端响应数据的类型。
SpringBoot后端接收参数的方式有以下几种:
@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的),对于get方法来说是没有请求体的,所以一般都是使用post请求方式时使用这种方式传参。
如果参数时放在请求体中,并且Content-Type为application/json,那么后台要用@RequestBody才能接收到;
如果不是放在请求体中的话,那么后台接收前台传过来的参数时,要用@RequestParam来接收,或则形参前 什么也不写也能接收。
@PostMapping("/example") public String handleFormSubmit(@RequestBody User user) { // 处理表单提交数据 }
@RequestBody会自动将请求体中的json数据封装进User实体类中。json的key和实体类的属性名一一对应。
@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属性来指定正确的参数名称。
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; }
(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注解才行。