一、SpringMVC中请求参数获取
1. 直接方法参数获取请求参数
可用于获取url路径和表单提交的请求参数,get/post请求方式都行,也可用于获得ajax简单类型参数。
注意:
- 请求参数名称要与方法形参名称一致,顺序无关但要区分大小写;
- 如果方法接收多个参数,传入一个参数也行,其他默认为null;
- 如果请求参数与方法参数类型不一致,会抛出转换异常。
2. @RequestParam注解方式获取请求参数
可用于获取url路径和表单提交的请求参数,get/post请求方式都行。
使用场景:
- 简单类型的绑定或对象类型;
Content-Type: application/x-www-form-urlencoded
编码的内容,提交方式get、post。
@RequestParam
作用:把请求中指定名称的参数给控制器类中的形参赋值。
属性:
value
: 请求中指定参数的名称,如:/user/find?id=123
中的id;required
:请求参数中是否必须提供此参数。默认值为true,表示必须提供,如果不提供将报错;defaultValue
:指定默认值,传递参数为null或不传递时使用该默认值。
注意:
- 参数类型需要保证一致;
- 不指定注解的value属性时,等同于第一种方式获取请求参数;
- 通过在后台方法接收请求数据时,使用包装类型没有传入参数不会报错。
3. RequestBody注解方式获取请求参数
使用场景:常用来处理Content-Type
不是application/x-www-form-urlencoded
编码的内容,如:application/json, application/xml
等。
常用于获取请求体参数,如ajax,仅能使用post方式提交请求参数。
注意:
- required:是否必须有请求体,默认值是true,当取值为true时get请求方式会报错,如果取值为false,get 请求得到为null;
- 使用时机:当返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用。
补充:
@RequestBody
,作用:在处理器方法形参上使用,把请求的json格式数据,转换成java对象;@ResponseBody
,作用:在处理器方法返回值上使用,或者方法上使用,把响应的java对象,转换成json格式数据。
4. 通过 HttpServletRequest获取请求
常用于参数较多,且无法封装为对象的情况下,如ajax中传递请求参数。
注意:
- 这是最基本的获取参数的方式,get/post请求都适用,通常在filter,intercepter中也是可以通过HttpServletRequest对象来获取请求参数;
- 除了获取常见的请求参数之外,HttpServletRequest可以获取请求头的完整信息。
二、Controller层接收前端传递参数
1. ajax传递数组对象
- JS代码:
// 删除
$("#manager-del").click(function () {
var managerArray = new Array();
$("input:checkbox[name='manaCheck']:checked").each(function () {
managerArray.push($(this).val());
});
// 传递到controller层是个字符串数组
var managerStr = managerArray.toString();
$.get(base + "/manager/deleteByUuid", {"managerStr": managerStr}, function (result) {
}
});
- Controller层代码:
/**
* 删除管理员账号(根据uuid)
*/
@GetMapping("/deleteByUuid")
public boolean deleteByUuid(String[] managerStr) {
try {
managerService.deleteByUuid(managerStr);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}