SpringMVC注解
@RequestParam可以省略 放在参数前,表示只能接收参数a=b格式的数据,即Content-Type为application/x-www-form-urlencoded类型的内容。 这种参数形如:name=xxx&age=xxx。- 可能是拼接在 url 上的,如 get 方法,也可能是放在 http requestBody 里面的。
 - 这种参数可以使用
RequestParam注解接受,如果请求参数和方法参数一致的话,可以省略RequestParam注解。 
@RequestBody放在参数前,表示参数从request body中获取,而不是从地址栏获取,所以这肯定是接收一个 POST 请求的非 a=b 格式的数据,即Content-Type不为application/x-www-form-urlencoded类型的内容。- 一般情况下来说常用其来处理 
application/json类型。 @RequestBody接收的是一个Json对象的字符串,而不是一个 Json 对象。在进行对象封装后,需要使用JSON.stringify(data)的把对象变成字符串,然后才能调用 ajax 提交。- 使用
@RequestBody注解的时候,前台的Content-Type必须要改为application/json,json指的是字符串。 
- 一般情况下来说常用其来处理 
 以对象接收
@RequestMapping(value = "/test",method = RequestMethod.POST)public BaseResult<Object> test(@RequestBody Item item) {}
以map接收
@RequestMapping(value = "/test",method = RequestMethod.POST)public BaseResult<Object> test(@RequestBody Map<String,Object> item){ ... }
以字符串接收
@RequestMapping(value = "/test",method = RequestMethod.POST)public BaseResult<Object> test(@RequestBody String param){JSONObject json = JSON.parseObject(param);}
前端JSON
如果想以 JSON 格式把数据提交到后台的话,
JSON.stringify()必须有,否则只会当做表单提交JSON对象:
var str2 = { "name": "deluyi", "sex": "man" };JSON字符串:
var str1 = '{ "name": "deyuyi", "sex": "man" }';JSON 本身就是文本格式(字符串)的, 与其他程序进行数据交换时,传递的就是 字符串。
注意:
- 当Ajax以
application/x-www-form-urlencoded格式上传即使用JSON对象,后台需要使用@RequestParam或者Servlet获取。 - 当Ajax以
application/json格式上传即使用JSON字符串,后台需要使用@RquestBody获取 
POST发送数据格式
1.application/x-www-form-urlencoded
如果不设置Content-Type,默认以application/x-www-form-urlencoded提交数据
2.multipart/form-data
适用文件上传
3. application/json
如果想以 JSON 格式把数据提交到后台的话,JSON.stringify() 必须有,否则只会当做表单提交
