详解 POST 请求中的 Content-Type 配置,application/x-www-form-urlencoded 和 application/json

业余杂谈 herman 2850浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:xttblog,发送下载链接帮助你免费下载!
本博客日IP超过1800,PV 2600 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:xttblog,之前的微信号好友位已满,备注:返现
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

最近发生了一件怪异的事情。在一个前后端分离的项目中,有人把后端的接口编写好了,然后使用 postman 去测试,总是获取不到 POST 请求中的参数。这其中的原因就是和 Content-Type 类型的值有关。

Content-Type 对应的值,其实就是 MIME。有非常多的值,这个我们还可以在 Tomcat、Nginx 等当中进行配置。

场景的 Content-Type 的值如下:

  • application/x-www-form-urlencoded:默认的 encType,当 form 表单请求为 get 时,数据被编码为 key/value 格式(name1=value1&name2=value2…),然后把这个字串 append 到 url 后面,用 ? 分割,加载这个新的 url 发送到服务器(表单默认的提交数据的格式);当请求为 post 时,浏览器把 form 数据封装到 http body 中,然后发送到 server。(form 的 enctype 属性为编码方式,常用有两种:application/x-www-form-urlencoded 和 multipart/form-data,默认为 application/x-www-form-urlencoded。)
  • multipart/form-data:需要在表单中进行文件上传时,就需要使用该格式
    application/json:application/json 这个 Content-Type 作为响应头大家肯定不陌生。实际上,现在越来越多的人把它作为请求头,用来告诉服务端消息主体是序列化后的 JSON 字符串
  • text/xml:它是一种使用 HTTP 作为传输协议,XML 作为编码方式的远程调用规范
  • application/xhtml+xml:XHTML格式
  • application/xml:XML数据格式
  • application/atom+xml:Atom XML聚合格式
  • application/json:JSON数据格式
  • application/pdf:pdf格式
  • application/msword:Word文档格式
  • application/octet-stream:二进制流数据(如常见的文件下载)
  • text/html:HTML格式
  • text/plain:纯文本格式
  • image/gif:gif图片格式
  • image/jpeg:jpg图片格式
  • image/png:png图片格式

我们这位开发人员使用 swagger 进行请求是可以取到参数的。但是使用 Postman 之后,发现无法获取到参数了。

最后我帮忙排查,发现 swagger 中,默认使用的是 application/x-www-form-urlencoded。

而他的 Postman 中,默认配置的是 application/json。需要注意的是,使用 application/json 这种 Content-Type 类型。再使用 @RequestParam 就会取不到值。

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加QQ1群:135430763(2000人群已满),QQ2群:454796847(已满),QQ3群:187424846(已满)。QQ群进群密码:xttblog,想加微信群的朋友,之前的微信号好友已满,请加博主新的微信号:xttblog,备注:“xttblog”,添加博主微信拉你进群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作可添加助理微信进行沟通!

本文原文出处:业余草: » 详解 POST 请求中的 Content-Type 配置,application/x-www-form-urlencoded 和 application/json