请求头content-type的不同格式后端应该如何接收

  • Post author:
  • Post category:其他



博客原文地址


"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&param2=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提交表单的区别

  1. 对于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;
}
  1. 对于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注解才行。



版权声明:本文为weixin_45934749原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。