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

博客原文地址

"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-urlencodedapplication/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注解才行。

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值