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-urlencode
d类型的内容。- 一般情况下来说常用其来处理
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() 必须有,否则只会当做表单提交