4种常见的POST数据提交方式_晨剑飞的博客-程序员宝宝

技术标签: spring  Spring MVC  HTTP  

HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS、GET、HEAD、POST、PUT、DELETE、TRACE、CONNECT 这几种。其中 POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据的几种方式。

我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。类似于下面这样:


1.第一种 application/x-www-form-urlencode

这应该是最常见的 POST 提交数据的方式了。浏览器的原生 <form> 表单,如果不设置 enctype 属性,那么最终就会以 application/x-www-form-urlencoded 方式提交数据。请求类似于下面这样:

BASHPOST http://www.example.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=utf-8

title=test&sub%5B%5D=1&sub%5B%5D=2&sub%5B%5D=3

首先,Content-Type 被指定为 application/x-www-form-urlencoded;其次,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码。


2.第二种multipart/formdata

这又是一个常见的 POST 数据提交的方式。我们使用表单上传文件时,必须让 <form> 表单的 enctype 等于 multipart/form-data。

这种数据提交方式主要用来上传文件的。

3.第三种application/json

让前端在content-type 设置为application/json,然后提交参数用JSON.stringify将JS对象序列化。

后端在spring中可以用@RequestBody 注解,这样直接可以将参数反序列化到对象中。这种方式在RestFul接口用的多,用Json提交的有个好处是可以处理非常复杂的数据机构。如果按照第一种键值对的方式提交,工作量较大。

坑:单个变量String的时候,不能直接接受(默认是转成map的)。报错:

org.springframework.http.converter.HttpMessageNotReadableException: Could not read document: Can not deserialize instance of java.lang.String out of START_OBJECT token
 at [Source: [email protected]; line: 1, column: 1]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token
 at [Source: [email protected]; line: 1, column: 1]
解决:

需要用非基础类型对象接收。

4.第四种text/xml

用的不多。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/happy_cheng/article/details/54604700

智能推荐

如何在繁忙的工作中,做好技术积累?_「已注销」的博客-程序员宝宝

引言古人云:“活到老,学到老。”互联网算是最辛苦的行业之一,“加班”对工程师来说已是“家常便饭”,同时互联网技术又日新月异,很多工程师都疲于应付,叫苦不堪。以至于长期以来流传一个很广的误解...

C语言递归的基础和数据结构的初步概念 _ZhangYv的博客-程序员宝宝

(1) C语言的函数和参数传递在着手开始学习数据结构与算法设计方法之前,我们先回顾一些C语言基础,这会有利于我们以后基于C语言的编程和分析,虽然其中有许多你可能已经非常熟悉了。1.1  函数与参数(传值、引用)【1】传值参数:考察函数Ex_1(程序1.1),a,b,c都是函数Ex_1的形式参数(formal parameter),类型均为整形,如果以下调用Ex_1(1, 2, x),它

netdb.h源代码_你回到了你的家的博客-程序员宝宝_netdb.h

POSIX.1:2001的extensionstruct addrinfostruct addrinfo { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; size_t ai_addrlen; char * ai_canonname; struct sockaddr * ai_addr; struct addrinfo * ai_next};参数解释:.

人工智能基础 | Python实现-产生式系统-文字动物识别系统_尤Ni的博客-程序员宝宝_人工智能产生式系统python

参考资料: 《人工智能通识教程》——王万良文章目录一、实现效果二、运行环境三、相关知识3.1 产生式系统3.2 控制系统(程序)的工作3.3 规则库总结四、程序4.1 流程图4.2 编写程序一、实现效果二、运行环境Pycharm 社区版 + Anaconda3三、相关知识3.1 产生式系统规则库:用于描述相应领域内知识的产生式集合综合数据库:用于存放问题求解过程中各种当前信息的数据结构控制系统:由程序组成,负责整个产生式系统的运行,实现对问题的求解3.2 控制系统(程序)的工

Vue.js:轻量高效的前端组件化方案_JackLiu16的博客-程序员宝宝

出处:http://www.csdn.net/article/1970-01-01/2825439Vue.js 是我在2014年2月开源的一个前端开发库,通过简洁的 API 提供高效的数据绑定和灵活的组件系统。在前端纷繁复杂的生态中,Vue.js有幸受到一定程度的关注,目前在 GitHub上已经有5000+的star。本文将从各方面对Vue.js做一个深入的介绍。开发初衷2013年末,我还在Goo...

onCreate onStart onResume_cluzax的博客-程序员宝宝

程序正常启动:onCreate()->onStart()->onResume();正常退出:onPause()->onStop()->onDestory()一个Activity启动另一个Activity: onPause()->onStop(), 再返回:onRestart()->onStart()->onResume()程序按back 退出: onPause()->onSto

随便推点

把virtual box的鏡像轉成qemu的鏡像_火雲邪神的博客-程序员宝宝_virtual box 安装qemu

VBoxManage clonehd "image.vdi" "image.img" --format RAWqemu-img convert -f raw image.img -O qcow2 image.qcow

吸顶式导航与视觉差效果_JAVACHENC的博客-程序员宝宝

吸顶式导航效果什么是吸顶式导航效果首先要创建个吸顶导航栏,这个吸顶导航栏的初始位置一般是靠近在页面的顶部位置,当页面向下滚动时超过了吸顶导航的初始位置时,需要把吸顶导航栏固定在窗口顶部,就实现吸顶式导航效果。具体代码如下:body代码:&amp;lt;div class=&quot;one1&quot;&amp;gt; &amp;lt;h2&amp;gt;SYROS&amp;lt;/h2&amp;gt; &amp;lt;ul class=&quot;one1_...

Android 如何通过google play获取最新版本并更新当前版本_SmallWalnutBG的博客-程序员宝宝

Android 如何通过google play获取最新版本并更新当前版本前言一、工具集成二、代码逻辑三、获取目标信息四、跳转Google play五、代码全览工具类调用六、 尾声前言当遇到直接通过Google play上的版本名称来更新我们自己的App时,这时我们可以通过访问Google play上目标App的版本信息,通知自己的App,并跳转到Google play。下面来看具体实现。一、工具集成implementation 'org.jsoup:jsoup:1.10.2'ps:jsoup官网

Linux zookeeper命令_king_qc的博客-程序员宝宝

 客户端命令首先通过命令连接zk:sh zkCli.sh -server ip:port常用操作命令如下:1. 显示根目录下、文件: ls / 使用 ls 命令来查看当前 ZooKeeper 中所包含的内容       例:查看zk上的dubbo服务 ls /dubbo              指定服务:ls /dubbo/com.test.TestService(使用...

SERVICE_FAILURE_ACTIONS_小发猫的博客-程序员宝宝

SERVICE_FAILURE_ACTIONSThe SERVICE_FAILURE_ACTIONS structure represents the action the service controller should take on each failure of a service. A service is considered failed when it terminates wi

推荐文章

热门文章

相关标签