Spring中controller中关于GET和POST请求的参数接收
Spring中controller中关于GET和POST请求的参数接收
GET请求
- 参数用&符号连接在一起[/get?name=tom]
//无参
//没有任何参数的请求
@GetMapping(value = "/metrics/get")
@ApiOperation("get请求没有任何参数")
public ResponseResult get() {
return ResponseResult.okResult ("GET请求无参");
}
//简单参数
//简单参数使用/metrics/getbyparam?name=%E9%A6%99%E6%A2%A8
@GetMapping(value = "/metrics/getbyparam")
@ApiOperation("get请求简单参数")
public ResponseResult getByParam(String name) {
return ResponseResult.okResult ("获取到的参数为:" + name);
}
//多个简单参数
//多个简单参数使用&符号连接 /metrics/getbyparams?age=13&name=%E9%BB%84%E7%93%9C"
//这里使用RequestParam 在请求参数和接收参数一致时可以不用,不一致时可以使用注解规定接收参数
@GetMapping(value = "/metrics/getbyparams")
@ApiOperation("get请求多个简单参数")
public ResponseResult getByParams(@RequestParam String name, @RequestParam Integer age) {
return ResponseResult.okResult ("获取到的参数为:" + name + ":" + age);
}
//数组
//简单参数的数组
@GetMapping(value = "/metrics/getbylist")
@ApiOperation("get请求list")
public ResponseResult getByList(String[] name) {
return ResponseResult.okResult ("获取到的参数为:" + name.toString ());
}
//对象
//get请求可以用对象接收参数属性一致 /metrics/getbybean?age=10&name=%E5%BC%A0%E4%B8%89
@GetMapping(value = "/metrics/getbybean")
@ApiOperation("get请求bean")
public ResponseResult getByBean(MulCO mulCO) {
return ResponseResult.okResult ("获取到的参数为:" + mulCO.toString ());
}
- 位置参数[/get/tom]
//位置参数
//使用@PathVariable注解规定参数
@GetMapping(value = "/metrics/getbypath/{id}/{name}")
@ApiOperation("get请求位置参数")
public ResponseResult getByPath(@PathVariable(name = "id") Long id, @PathVariable(name = "name") String name) {
return ResponseResult.okResult ("获取到的参数为:" + id + ":" + name);
}
POST请求
post请求的content-type类型有如下几种
application/x-www-form-urlencoded: 默认的表单提交格式,不支持文件
multipart/form-data: 用于上传文件,同时也支持普通类型的参数
application/json: 提交JSON格式的raw数据,适用于AJAX请求和REST风格的接口
- 默认表单 application/x-www-form-urlencoded
//简单参数 接收参数没有注解
//post请求如果参数没有任何注解 那就是默认提交的普通表单类型
@PostMapping(value = "/metrics/postbyparam")
@ApiOperation("post请求简单参数")
public ResponseResult postByParam(String room) {
return ResponseResult.okResult ("获取到的参数为:" + room + ":");
}
//多个简单参数
//接收参数没有任何注解 也是普通表单
@PostMapping(value = "/metrics/postbyparams")
@ApiOperation("post请求多个简单参数")
public ResponseResult postByParams(@RequestParam String room, @RequestParam Integer num) {
return ResponseResult.okResult ("获取到的参数为:" + room + ":" + num);
}
//实体类参数
//这里没有设置参数 注解 用的是普通表单数据
@PostMapping(value = "/metrics/postbybean")
@ApiOperation("post请求多个简单参数")
public ResponseResult postByBean(MulCO mulCO) {
return ResponseResult.okResult ("获取到的参数为:" + mulCO.toString ());
}
//多参数组
//这里没有设置参数 注解 用的是普通表单数据
@PostMapping(value = "/metrics/postbybeans")
@ApiOperation("post请求数组")
public ResponseResult postByBeans(String[] room) {
return ResponseResult.okResult ("获取到的参数为:" + room.toString ());
}
- JSON 格式 application/json
//普通参数 接收
//这里使用了@RequestBody 说明请求参数都是json格式 {"room":"豪华"}
@PostMapping(value = "/metrics/postbyraw")
@ApiOperation("post请求raw简单参数")
public ResponseResult postByRaw(@RequestBody Map params) {
return ResponseResult.okResult ("获取到的参数为:" + params.get ("room"));
}
//对象类型参数
//这里使用了@RequestBody json参数{"name":"tom","age":12}
@PostMapping(value = "/metrics/postbyrawbean")
@ApiOperation("post请求raw bean参数")
public ResponseResult postByRawBean(@RequestBody MulCO mulCO) {
return ResponseResult.okResult ("获取到的参数为:" + mulCO.toString ());
}
@PostMapping(value = "/metrics/postbyrawbeanlist")
@ApiOperation("post请求raw bean数组参数")
public ResponseResult postByRawBeanList(@RequestBody List<MulCO> mulCO) {
return ResponseResult.okResult ("获取到的参数为:" + JSON.toJSONString (mulCO));
}
关于前端请求的一些问题总结
1.关于Axios的请求内容格式
axios默认使用的content-type为application/json并且是以request payload的形式发送数据
1.使用axios发送数据 默认为json格式
2.[request payload]对应的就是application/json内容格式
3.要是使用axios发送form内容格式也就是[application/x-www-form-urlencoded]的请求,需要使用qs.stringify({...params})转换
2.Jquery的ajax的默认内容格式
[Jquery]的ajax默认的ContentType和数据格式 :application/x-www-form-urlencoded; charset=UTF-8
1.ajax默认的ContentType的值为:application/x-www-form-urlencoded; charset=UTF-8
此格式为表单提交格式,数据为key1=value1&key2=value2的格式
2.ajax的data属性值格式为:{key1:value1,key2:value2},但最后会转为key1=value1&key2=value2的格式提交到后台
3.如果ajax要和springmvc交互,key1=value1&key2=value2的格式,后台springmvc只需要定义对象或者参数就行了,会自动映射。
4.如果springmvc的参数有@RequestBody注解,ajax必须将data属性值转为json字符串,不能为json对象(js对象,会自动转为key=value形式)。并且,修改contentType的值为:application/json; charset=UTF-8,这样加了@RequestBody注解的属性才能自定映射到值