application/json和application/x-www-form-urlencoded使用选择
一、参考资料
选application/x-www-form-urlencoded还是application/json?
二、理解
1.@RequestBody的作用
注解用于将Controller的方法参数,根据HTTP Request Header的content-Type的内容,通过适当的HttpMessageConverter转换为JAVA类
使用场景是:POST或者PUT的数据是JSON格式或者XML格式,而不是普通的键值对形式.
2.
application/x-www-form-urlencoded通过表单提交,在sevlet实现中,mutipart/form-data和application/x-www-form-urlencoded会被特殊处理,请求参数将被放置于request.paramter,这是一个map。
当我们使用content-type=application/json且后台使用@RequestBody,则无法再从request.paramter中获取请求数据。
三、实际测试
1.前端js代码
function saveDwxxBtn() {
var data={
sbdw:"1",
sbdwid:"2",
sbsm:"3",
nf:"4"
}
$.ajax({
type:"POST",
contentType:"application/json",
dataType : "json",
url : 'saveZlsj',
data : data,
success : function(result) { },
error:function(data){} });
}
2.后台代码
@RequestMapping(value="/saveZlsj",method=RequestMethod.POST)
@ResponseBody
public AjaxResult saveZlsj(ModelMap model, HttpServletRequest request, Zlsj zlsj) { AjaxResult result = new AjaxResult();
try {
Integer pkid = zlService.saveZlsj(zlsj);
result.setIntVal(pkid);
} catch (Exception e) {
e.printStackTrace();
result.setStatusCode(0);
result.setMessage("操作失败");
}
return result;
}
3.运行结果
1.发现Zlsj并未接收到参数,加上@RequestBody后就可以接收到参数了
2.修改js,改成序列化表单的形式提交代码,不加@RequestBody可以接收到参数,加上@RequestBody则不能接收到参数
四、总结
如果数据是简单、平面的key-value键值对,那么使用application/x-www-form-urlencoded简单实用,不需要额外的编解码
如果数据是复杂的嵌套关系,有多层数据,那么使用application/json会简化数据的处理
application/json和application/x-www-form-urlencoded使用选择的更多相关文章
- multipart/form-data,application/json和application/x-www-form-urlencoded区别
application/json和application/x-www-form-urlencoded都是表单数据发送时的编码类型. EncType: enctype 属性规定在发送到服务器之前应该如何 ...
- application/json和application/x-www-form-urlencoded区别
application/json和application/x-www-form-urlencoded都是表单数据发送时的编码类型. EncType: enctype 属性规定在发送到服务器之前应该如何 ...
- 在同一个项目中灵活运用application/json 和application/x-www-form-urlencoded 两种传输格式(配合axios,同时配置loading)
'use strict' import axios from 'axios' // import qs from 'qs' import { Notification} from 'element-u ...
- vue(axios)封装,content-type由application/json转换为application/x-www-form-urlencoded
现在主流的http请求头的content-type有三种(不讨论xml): application/x-www-form-urlencoded 最常见的提交数据方式,与原生form表单数据一致,在c ...
- application/json 与 application/x-www-form-urlencoded的简单比较
application/x-www-form-urlencoded 提交请求示例 curl -X POST 'http://localhost:8080/formPost' -d 'id=1& ...
- application/json 和 application/x-www-form-urlencoded的区别
public static string HttpPost(string url, string body) { //ServicePointManager.ServerCertificateVali ...
- application/json和application/x-www-form-urlencoded参数接收
application/json ajax请求中content-type:application/json代表参数以json字符串传递给后台,controller接收需要@RequestBody 接收 ...
- IE10以下的IE浏览器在form表单提交、a标签等场景下,接收application/json类型的响应时,会提示是否要下载该json文件
IE10以下的IE浏览器并不支持application/json这种response格式,所以需要在服务端先将对象转成json字符串然后,设置Content-Type为text/html的类型,再返回 ...
- !!!四种常见的 POST 提交数据方式(含application/json)
HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PUT.DELETE.TRACE.CONNECT 这几种.其中 POST 一般用来向服务端提交数据,本文 ...
随机推荐
- [转]Python如何引入自定义模块?
转自 http://www.cnblogs.com/JoshuaMK/p/5205398.html Python运行环境在查找库文件时是对 sys.path 列表进行遍历,如果我们想在运行环境中注册新 ...
- redis 5.0.3 讲解、集群搭建
REDIS 一 .redis 介绍 不管你是从事Python.Java.Go.PHP.Ruby等等... Redis都应该是一个比较熟悉的中间件.而大部分经常写业务代码的程序员,实际工作中或许只用到了 ...
- 黄聪:AngularJS最理想开发工具WebStorm
Aug 29, 2013 Tags: angularangular.jsangularjswebstorm Comments: 23 Comments AngularJS最理想开发工具WebStorm ...
- linux系统常用的基本命令分类
linux系统常用的基本命令分类: 文件命令:vim vimdiff diff mkdir touch rm mv cp ln cd ls more less head tail cat grep e ...
- msvcp140.dll丢失解决方案
[首先给出99%情况下都能解决这个问题的最简单办法]: 下载并安装微软VC++2015版运行库 (英文全称:Microsoft Visual C++ 2015 Redistributable Pa ...
- TCP/IP学习20180630-数据链路层-router choose
IP路由选择 当一个IP数据包准备好了的时候,IP数据包(或者说是路由器)是如何将数据包送到目的地的呢?它是怎么选择一个合适的路径来"送货"的呢? 最特殊的情况是目的主机和主机直连 ...
- [UE4]Invalidation Box
Invalidation Box:使条目无效的容器.使容器内的条目不再更新,如果确定某一个UI不需要更新的话,就可以把这个UI放到Invalidation Box中. 一.Invalidation B ...
- Java访问Phoenix连接
两种方法,一种是直接使用jdbc连接,一种是使用spring连接. jdbc连接和访问oracle步骤相同: ///////////// 测试Phoenix连接 /////////////// Str ...
- 自然语言处理NLP-云端API汇总
Google Google Cloud:https://cloud.google.com/natural-language/ ParallelDots ParallelDots, Inc. 无需训练, ...
- ADB文件及文件夹操作
1.创建文件夹: adb shell mkdir /data/local/tmp/local多级的一次只能创建一级adb shell mkdir /data/local/tmp/local/tmp 2 ...