赞
踩
在使用简单数据类型绑定时,可以很容易的根据具体需求来定义方法中的形参类型和个数,然而在实际应用中,客户端请求可能会传递多个不同类型的参数数据,如果还使用简单数据类型进行绑定,那么就需要手动编写多个不同类型的参数,这种操作显然比较繁琐。为解决这个问题,可以使用POJO类型进行数据绑定。
POJO类型的数据绑定就是将所有关联的请求参数封装在一个POJO中,然后在方法中直接使用该POJO作为形参来完成数据绑定。
下面通过用户注册案例演示POJO的数据绑定,该案例要求表单提交的数据绑定在处理器User类型的形参中,案例具体实现步骤如下所示。
- public class User {
- private String username; //用户名
- private String password; //用户密码
-
- public String getUsername() {
- return username;
- }
-
- public void setUsername(String username) {
- this.username = username;
- }
-
- public String getPassword() {
- return password;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
- }
- // 接收表单用户信息
- @RequestMapping("/registerUser")
- public void registerUser(User user) {
- String username = user.getUsername();
- String password = user.getPassword(); System.out.println("username="+username+",password="+password);
- }
- <html><head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>注册</title></head>
- <body><form action="${pageContext.request.contextPath}/registerUser"
- method="post">
- 用户名:<input type="text" name="username" /><br />
- 密 码:<input type="password" name="password" /><br />
- <input type="submit" value="注册"/>
- </form></body>
- </html>
在POJO类型数据绑定时,客户端请求的参数名称(本例中指form表单内各元素name的属性值)必须与要绑定的POJO类中的属性名称保持一致。这样客户端发送请求时,请求数据才会自动绑定到处理器形参POJO对象中,否则处理器参数接收的值为null。
username=enjoy,password=123
从图中可以看出,程序成功打印出了用户名和密码。这表明registerUser()方法获取到了客户端请求中的参数username和参数password的值,并将username和password的值分别赋给了getUserNameAndId( )方法中user形参的username属性和password属性,实现了POJO数据绑定。
- <filter> <filter-name>CharacterEncodingFilter</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>CharacterEncodingFilter</filter-name>
- <url-pattern>/*</url-pattern> </filter-mapping>
上述代码中,在<filter>元素中,首先使用<fillter-class>元素配置了编码过滤器类org.springframework.web.filter.CharacterEncodingFilter,然后使用<init-param>元素设置统一的编码为UTF-8。最后配置<filter-mapping>元素,拦截前端页面中的所有请求,并交由名称为CharacterEncodingFilter的编码过滤器类进行处理,将所有的请求信息内容以UTF-8的编码格式进行解析。
username=享受,password=123
从图中所示的打印信息可以看出,服务器端正确获取中文数据,这说明编码过滤器配置成功。
以上可以解决post请求乱码问题,对于get请求中文参数出现乱码,可以在使用参数之前重新编码,如String username = new String(user.getUsername().getBytes(“ISO8859-1”),“UTF-8”);,其中ISO8859-1是Tomcat默认编码,需要将Tomcat编码后的内容再按UTF-8编码。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。