一、参考资料

选application/x-www-form-urlencoded还是application/json?

@RequestBody应用

二、理解

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使用选择的更多相关文章

  1. multipart/form-data,application/json和application/x-www-form-urlencoded区别

    application/json和application/x-www-form-urlencoded都是表单数据发送时的编码类型. EncType: enctype 属性规定在发送到服务器之前应该如何 ...

  2. application/json和application/x-www-form-urlencoded区别

    application/json和application/x-www-form-urlencoded都是表单数据发送时的编码类型. EncType: enctype 属性规定在发送到服务器之前应该如何 ...

  3. 在同一个项目中灵活运用application/json 和application/x-www-form-urlencoded 两种传输格式(配合axios,同时配置loading)

    'use strict' import axios from 'axios' // import qs from 'qs' import { Notification} from 'element-u ...

  4. vue(axios)封装,content-type由application/json转换为application/x-www-form-urlencoded

    现在主流的http请求头的content-type有三种(不讨论xml): application/x-www-form-urlencoded  最常见的提交数据方式,与原生form表单数据一致,在c ...

  5. application/json 与 application/x-www-form-urlencoded的简单比较

    application/x-www-form-urlencoded 提交请求示例 curl -X POST 'http://localhost:8080/formPost' -d 'id=1& ...

  6. application/json 和 application/x-www-form-urlencoded的区别

    public static string HttpPost(string url, string body) { //ServicePointManager.ServerCertificateVali ...

  7. application/json和application/x-www-form-urlencoded参数接收

    application/json ajax请求中content-type:application/json代表参数以json字符串传递给后台,controller接收需要@RequestBody 接收 ...

  8. IE10以下的IE浏览器在form表单提交、a标签等场景下,接收application/json类型的响应时,会提示是否要下载该json文件

    IE10以下的IE浏览器并不支持application/json这种response格式,所以需要在服务端先将对象转成json字符串然后,设置Content-Type为text/html的类型,再返回 ...

  9. !!!四种常见的 POST 提交数据方式(含application/json)

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

随机推荐

  1. Tomcat虚拟根目录与虚拟目录

    tomcat版本:apache-tomcat-7.0.42 参考:http://blog.csdn.net/pangdingshan/article/details/7214786 一.虚拟根目录 1 ...

  2. springboot @RequestBody使用JsonSerialize与 JsonDeserialize自定义转参数,处理Date日期格式

    JsonDeserialize: 1.请求接收的是一个json,并且由对象接收 @RequestMapping(value = "/query", method = {Reques ...

  3. Excel函数之vlookup的用法

    Vlookup函数用法: 实例: 要将编号对照表中的图书名称根据两表中的图书编码字段引入 订单明细中. Vlookup函数 参数一:键入一个需要搜索的字段,这里需要通过订单明细中的图书编号在编号对照离 ...

  4. Tomcat整体架构分析

    下面让我们来看看Tomcat容器的整体结构: 本文的目的是覆盖这张图中所涉及的主要请求处理组件.而上图中的一些高级主题如集群和安全则不是在本文讨论的范围之内. 本图中,Service, Host, C ...

  5. Linux(centos 7)配置tomcat8、JDK1.8、lighttpd、ngnix、mysql

    JDK 下载好后使用 rpm -ivh jdk-7u25-linux-x64.rpm 进行安装. 安装好后编辑 /etc/profile 文件,在末尾加上: 1 2 3 export JAVA_HOM ...

  6. 如何查看k8s存在etcd中的数据(转)

    原文 https://yq.aliyun.com/articles/561888 一直有这个冲动, 想知道kubernetes往etcd里放了哪些数据,是如何组织的. 能看到,才有把握知道它的实现和细 ...

  7. SQLSERVER创建该存储过程时不会出错,但是执行存储过程时报错

    创建该存储过程时,不会出错,但是执行存储过程时,会报出下面这样的错误 这是因为在存储过程创建时,它先做语法检查,如果通过了语法检查,它会尝试解析它包含的对象名,如果存在也会解析该对象引用的对象是否存在 ...

  8. 2017-2018-2 20165312 课下选做 MySort

    2017-2018-2 20165312 课下选做 MySort 题目描述 模拟实现Linux下Sort -t : -k 2的功能,参考 Sort的实现. import java.util.*; pu ...

  9. 20165312 2017-2018-2 《JAVA程序设计》第2周学习总结

    20165312 2017-2018-2 <JAVA程序设计>第2周学习总结 一.对上一周学习的查漏补缺 1.上周在虚拟机中进行编译程序时出现错误,在上一周的博客中我有提到,当时还未找到解 ...

  10. day34进程相关

    进程1 什么是进程    进程指的是一个正在进行/运行的程序,进程是用来描述程序执行过程的虚拟概念    进程vs程序    程序:一堆代码    进程:程序的执行的过程    进程的概念起源于操作系 ...