Spring Boot接收请求时出现 Content type ‘application/x

您所在的位置:网站首页 type_application_over Spring Boot接收请求时出现 Content type ‘application/x

Spring Boot接收请求时出现 Content type ‘application/x

2024-07-17 00:08:02| 来源: 网络整理| 查看: 265

问题原因

今天在调试一个发送短信的HTTP接口时候,在SpringBoot接口的接收请求时出现 Content type ‘application/x-www-form-urlencoded;charset=UTF-8’ not supported;由报错日志可知使用@RequestBody注解解析,那么对应支持发送数据的请求头数据格式应该是application/json在这里插入图片描述 再回去看发送方发送数据请求头设置的数据格式为application/x-www-form-urlencoded,然后导致接收方接口中使用了(@RequestBody TokenBean tokenBean)方式来解析HTTP请求体body中的json对象导致出错,将Content-Type方式修改为application/json就可以正常解析了。 在这里插入图片描述

那为什么@RequestBody不支持数据格式为application/x-www-form-urlencoded的呢?这就要知道@RequestBody的作用是什么?以及我们知道另外一个注解@RequestParam有何它有什么关系呢?

@RequestBody和@RequestParam

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的)

GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。

在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。即一个请求只有一个@RequestBody;一个请求可以有多个@RequestParam。

注解@RequestParam接收的参数是来自requestHeader中,即请求头。 RequestParam可以接受简单类型的属性,也可以接受对象类型。 @RequestParam有三个配置参数: required 表示是否必须,默认为 true,必须。 defaultValue 可设置请求参数的默认值。 value 为接收url的参数名(相当于key值)。 @RequestParam用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内容,Content-Type默认为该属性。@RequestParam也可用于其它类型的请求,例如:POST、DELETE等请求。

@RequestParam 底层是通过request.getParameter方式获得参数的,也就是说,@RequestParam 和request.getParameter是同一回事。因为使用request.getParameter()方式获取参数,可以处理get 方式中queryString的值,也可以处理post方式中 body data的值。如果请求传的是Json对象则后端可以使用@RequestParam。

所以在postman中,要选择body的类型为 x-www-form-urlencoded,这样在headers中就自动变为了 Content-Type : application/x-www-form-urlencoded 编码格式。

参考文章如下:https://blog.csdn.net/weixin_38004638/article/details/99655322

Content-type的类型

这里需要说明一下HTTP的POST请求的数据格式,在HTTP的请求头中,可以使用Content-type来指定不同格式的请求信息。

常见的媒体格式类型:

text/html : HTML格式 text/plain :纯文本格式 text/xml : XML格式 image/gif :gif图片格式 image/jpeg :jpg图片格式 image/png:png图片格式

以applicaton开头的类型:

application/json : JSON数据格式 application/xhtml+xml :XHTML格式 application/xml : XML数据格式 application/atom+xml :Atom XML聚合格式 application/pdf :pdf格式 application/javascript :js格式 application/msword : Word文档格式 application/octet-stream : 二进制流数据(如常见的文件下载) application/x-www-form-urlencoded :form表单默认的数据格式类型,form表单数据被编码为key/value格式发送到服务器。 multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式。

除了原生的content-type,开发人员也可以完全自定义数据提交格式!

最常用的三种:

(1)application/x-www-form-urlencoded,form表单默认的数据格式,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。大部分服务端语言都对这种方式有很好的支持。

# Request Header POST /adduser HTTP/1.1 Host: localhost:8030 Connection: keep-alive Content-Length: 16 Pragma: no-cache Cache-Control: no-cache Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36 Content-Type: application/x-www-form-urlencoded Accept: */* Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 # Form Data name=name&age=11

(2)application/json,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串。服务端语言也有很多函数去解析JSON,使用JSON可以支持更加复杂的结构化数据。

# Request Header POST /adduser HTTP/1.1 Host: localhost:8030 Connection: keep-alive Content-Length: 24 Pragma: no-cache Cache-Control: no-cache Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36 Content-Type: application/json Accept: */* Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 # Request Payload {"name":"121","age":121}

(3)multipart/form-data,对用于在表单中上传文件时,也可以上传普通数据,只需要让from的ectyle等于multipart/form-data就可以了。比如下面的http请求格式:

# Request Header POST /adduser HTTP/1.1 Host: localhost:8030 Connection: keep-alive Content-Length: 232 Pragma: no-cache Cache-Control: no-cache Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryBRi81vNtMyBL97Rb Accept: */* Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9 # Request Payload ------WebKitFormBoundaryBRi81vNtMyBL97Rb Content-Disposition: form-data; name="name" name1 ------WebKitFormBoundaryBRi81vNtMyBL97Rb Content-Disposition: form-data; name="age" 12 ------WebKitFormBoundaryBRi81vNtMyBL97Rb--

这种格式的数据会有一个边界线boundary(这里就是------WebKitFormBoundaryBRi81vNtMyBL97Rb)用于分割不同的字段,为了避免与正文内容重复,boundary很长很复杂。消息主体以boundary开始,紧接着就是内容描述信息,然后是回车,最后是字段具体的内容(文本或二进制)。如果传输的是文件,还要包含文件名和文件类型信息。消息主体以boundary结束。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭