SpringMVC注解

  • @RequestParam 可以省略 放在参数前,表示只能接收参数a=b格式的数据,即Content-Typeapplication/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指的是字符串。
  • 以对象接收

    1. @RequestMapping(value = "/test",method = RequestMethod.POST)
    2. public BaseResult<Object> test(@RequestBody Item item) {}
  • 以map接收

    1. @RequestMapping(value = "/test",method = RequestMethod.POST)
    2. public BaseResult<Object> test(@RequestBody Map<String,Object> item){ ... }
  • 以字符串接收

    1. @RequestMapping(value = "/test",method = RequestMethod.POST)
    2. public BaseResult<Object> test(@RequestBody String param){
    3. JSONObject json = JSON.parseObject(param);
    4. }

    前端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提交数据
image.png

2.multipart/form-data

适用文件上传
image.png

3. application/json

如果想以 JSON 格式把数据提交到后台的话,JSON.stringify() 必须有,否则只会当做表单提交
image.png