注解支持的类型支持的请求类型支持的Content-Type请求示例
@PathVariableurlGET所有/test/{id}
@RequestParamurlGET所有/test?id=1
@RequestBodyBodyPOST/PUT/DELETE/PATCHjson{“id”:1}

复杂参数接收,功能实现
单个参数就写个属性
有角标数组的就写个集合
参数用对象的就
在对象中再建立一个对象

POST

@RequestParam

接收JSON对象

 function testPost() {
    var queryData = {
        jflb: "测试spring MVC 的参数接收!",
        zlay: "xxxxx",
        bir: new Date(),
        ysCode: ["0123", "4567"]
    }
    $.ajax({
        type: 'post',
        url: '/mvc/queryTests',
        data: queryData,
        dataType: "json",
        success: function (data) {
            console.log(data);
        }
    });
}

后台 使用 @RequestParam

	@PostMapping(value = "/queryTests", produces = MediaType.ALL_VALUE)
	public String queryActionByDisputes(@RequestParam String jflb, @RequestParam String zlay,
			@RequestParam(value = "ysCode[]") String[] ysCode,@RequestParam Date bir) {
		System.err.println(jflb + zlay + Arrays.toString(ysCode)+bir);
		return "SUCCESS";
	}

@RequestBody

只能接收JSON字符串,因此 Content-Type需要更改,同时 data也要更改

 function testPost() {
    var queryData = {
        name: "测试spring MVC 的参数接收!",
        info: "xxxxx",
        bir: new Date(),
        arrCode: ["0123", "4567"]
    }
    var queryUrl = '/mvc/queryTest'
    $.ajax({
        type: 'post',
        url: queryUrl,
        data: JSON.stringify(queryData),
        contentType: 'application/json;charset=UTF-8',
        dataType: "json",
        success: function (data) {
            console.log(data);
        }
    });
}

后台 使用 @RequestBody

	@PostMapping(value = "/queryTest", produces = MediaType.ALL_VALUE)
	public String queryActionByDispute(@RequestBody Map<String, Object> queryMape) {
		System.err.println(queryMape);
		return "SUCCESS";
	}

	// 自定义VO 
	public class McVO {
		// 省略 getter setter  
	private String name;
	private String info;
	private Date bir;
	private List<String> arrCode;
	
	}

	@PostMapping(value = "/queryTest", produces = MediaType.ALL_VALUE)
	public void useVo(@RequestBody McVO vo) { }

接收List&Array

let   array = []
    for (let index = 0; index < 10; index++) {
      array.push({
          id:index,
          name:'uuid'+index,
          username:'hello-->'+new Date()+"",
          age:index*8
      })
        
    }
	 
	var queryUrl = '/info'
	$.ajax({
		type: 'post',
        url: queryUrl,
        contentType: 'application/json;charset=UTF-8',
        data:JSON.stringify(array),
        dataType: "json",
 	    success: function (data) {
	        console.log(data);
	    }
	});

    // 另一种方式  可以携带多余的数据 , 例如 token


$.ajax({
    //默认传输的内容类型为 key-value 型,后台使用数组、List 接收参数时,
    // headers 中必须指定内容类型为 json 类型,否则会报415错误
    headers: {
        'Content-Type': 'application/json;charset=utf8',
            'TOKEN':'UUID_RE_KEY_89898078'
    },
    type: "post",
    url: "http://localhost:8080/user/save5",
    //指定 json 类型后,传输的数据理所当然应该是 json 格式。
    data: JSON.stringify(data),
    success: function (data) {
        console.log(data);
    },
    error: function (data) {
        console.log("ERROR:" + JSON.stringify(data));
    }
}); 

后台使用 @Requestbody

	@ResponseBody
	@RequestMapping(value = "info")
	public ResultBean info(@RequestBody List<User> user) {
		return ResultBean.ok().put("token", UUID.randomUUID().toString()).put("request", user);
	}

get请求

(接收JSON对象、对象中包含数组)

function testPost() {
    var queryData = {
        info: "测试spring MVC 的参数接收!",
        name: "xxxxx",
        bir: new Date(),
        arrCode: ["0123", "4567"]
    }
    var queryUrl = '/mvc/queryTests'
    $.ajax({
        type: 'get',
        url: queryUrl,
        data: queryData,
        dataType: "json",
        success: function (data) {
            console.log(data);
        }
    });
}
	@GetMapping(value = "/queryTests", produces = MediaType.ALL_VALUE)
	public String queryActionByDisputes(@RequestParam String info, @RequestParam String name,
			@RequestParam(value = "arrCode[]") List<String> arrCode,@RequestParam Date bir) {
		System.err.println(info + name + (arrCode)+bir);
		return "SUCCESS";
	}

@RequestParam POST请求 @RequestParam:

  • 用来处理(前端)Content-Type: 为 application/x-www-form-urlencoded或者form-data编码的内容

  • 该注解有两个属性: value、required; value用来指定要传入值的id名称,required用来指示参数是否必须绑定; 注意这里Headers里不能以application/json作为Content-type,否则后台也接收不到请求

  1. @RequestParam 来自于requestHeader中,即请求头,
  2. 但是却不是JSON,这个一般就是在ajax里面没有声明(别人调用)contentType的时候,为默认的

@RequestBody

  1. 该注解常用来处理Content-Type: 不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等; 前端规定的是raw方式,那么就需要使用@RequestBody接收参数,注意这里Headers里需要以application/json作为Content-type

@Requestbody 来自于requestBody中,即请求体中。当前端或者别人传入JSON数据给你时,使用此注解,就已将传入给你的字段或者属性将与你所创建的实体类绑定到一起,不相信的可以Debug测试看看传入参数是否在这个实体里面。

注意事项

@RequestParam@RequestBody
contentType:‘application/x-www-form-urlencoded’ 可以不用定义,contentType默认值contentType: 'application/json;charset=UTF-8' 必须定义,处理非Content-Type: application/x-www-form-urlencoded编码格式的数据
GET、POSTPOST
处理地址栏传递过来的数据处理HttpEntity传递过来的数据
可以接收JSON字符串,也可以接收JSON对象只接收JSON字符串
  • 未定义Content-type的类型

Jquery默认使用application/x-www-form-urlencoded类型(application/x-www-form-urlencoded 把JSON对象数据转换成一个字串)。那么意思就是SpringMVC的@RequestParam注解,Servlet的request.getParameter是可以接受到以这种格式传输的JSON对象的。

  • 使用@RequestBody注解

    前台的Content-Type必须要改为application/json,如果没有更改,前台会报错415(Unsupported Media Type)。后台日志就会报错Content type ‘application/x-www-form-urlencoded;charset=UTF-8’ not supported

  • 前台报400的错:原因:GET方式添加了contentType: 'application/json;charset=UTF-8'

  • @RequestParam 它的作用和我们Servlet中的request.getParameter是基本相同的

传递数组:

(1)post请求,JSON对象传递,@RequestParam 接收

最重要:@RequestParam接收的参数说明是数组 @RequestParam("ysCode[]") List<String> ysCode

(2)post请求  JSON字符串传递  @RequestBody接收

(3)get请求,JSON对象传递,@RequestParam 接收

最重要:@RequestParam接收的参数说明是数组  @RequestParam("ysCode[]") List<String> ysCode

(4)post请求  JSON字符串传递  @RequestParam 接收

  • @RequestParam,是获取前端传递给后端的参数,可以是get方式,也可以是post方式。其中如果前端传递的参数和后端你接受的参数起的名字字段是一致的可以省略不写,也可以直接写 @RequestParam String title ,如果不一致一定要完整写,不然获取不到

Content-Type

常见的媒体格式类型如下以application开头的媒体格式类型媒体格式是上传文件
text/html : HTML格式
text/plain :纯文本格式
text/xml : XML格式
image/png:png图片格式
application/xhtml+xml :XHTML格式
application/xml : XML数据格式
application/atom+xml :Atom XML聚合格式
application/json : JSON数据格式
application/pdf :pdf格式
 application/msword : Word文档格式
application/octet-stream : 二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded : form 表单 encType="" 中默认的encType,form表单数据被编 码 为key/value格式发送到服务器(表单默认的提交数据的格式)
multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式