简洁来说,就是form表单有多个input(checkbox,hidden),name同名,后台是如何接收的。
form表单
<form action="testName.do" method="POST" >
input1: <input type="text" name="userName"/>
input2: <input type="text" name="userName"/>
<input type="submit" value="Submit"/>
</form>
后台使用String接收

如图所示,使用string接收,springmvc会自动将两个name参数值用英文逗号
“,”
隔开,拼成字符串赋值给参数userName。
后台使用
String[]
如图所示,后台使用字符串数组接收,两个name对应参数值自动封装为字符串数组。
效果同下:
String[] parameterValues = request.getParameterValues("userName");
后头使用List接收
@RequestMapping("testName")
public void testName(HttpServletRequest request, HttpServletResponse response, @RequestParam List userName){
System.out.println(userName);
}
打印结果如下:
[123, 456]
如果不使用
@RequestParam
或其他注解:
- 如果定义的是List这种未指定具体类型,则会抛出
;java.lang.IllegalArgumentException: Cannot generate variable name for non-typed Collection parameter type
- 如果定义
,则会抛出List<String>
;java.lang.IllegalStateException: No primary or default constructor found for interface java.util.List
- 如果定义了
,则这里userName为空。ArrayList<String>
也就是说SpringMVC内置了转换,可以从一个英文逗号分隔的字符串转换为数组、字符串数组或类型转换系统已知的其他类型。例如一个方法参数
@RequestHeader("Accept")
可以是
String
类型,也可以是
String[] or List<String>