SpringMVC接收请求参数为集合类型的系列问题及解决

242 阅读1分钟

1.Controller层代码:

需要接收一个User类型的List集合,该集合封装在一个VO类中 先看Controller层代码:

//请求数据为集合
@RequestMapping(value = "/requst4")
@ResponseBody //告诉SpringMvc框架,不进行视图跳转,只回写数据
//void表示响应体为空
public void request4(VO vo) throws Exception {
    System.out.println(vo);
}

2.jsp表单代码:

<form action="/user/requst4" method="post">
    <input type="text" name="userList[0].username"><br>
    <input type="text" name="userList[0].sex"><br>
    <input type="text" name="userList[1].username"><br>
    <input type="text" name="userList[1].sex"><br>
    <input type="submit"><br>
</form>

3.首次提交,报了500

image.png 经过异常信息的分析,推测是User类没有提供无参构造器,提供后再次测试

4.第二次测试,报400

image.png

image.png 根据提示,应该是参数匹配出错,观察User类的定义

image.png

没有看出有什么问题,但怀疑是sex匹配有误,抱着试一试的心态,将测试的性别写为英文字符n

image.png 此时没有报错了,但后台中文出现乱码,此时可以推测是编码问题,且之前的sex中文字符输入报错,应该也是由编码引起的

image.png

5.解决:

在web.xml配置编码过滤器,代码如下:

<!--    配置编码过滤器-->
<filter>
    <filter-name>CharacterEncoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CharacterEncoding</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

再进行测试:

image.png

image.png 没有报错,且中文正常,成功解决

6.总结

SpirngMVC接收集合类型的参数

1.实体类要提供无参构造方法

2.出现乱码需要配置编码过滤器

3.中文单个字符匹配报400也是编码的问题,解决方案和2一样