开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第13天
POJO绑定
在实际应用中,客户端请求可能会传递多个不同类型的参数数据,如果我们仍然使用简单数据类型进行绑定,那么就需要手动编写多个不同类型的参数,这种操作显然比较繁琐。为解决这个问题,我们使用POJO类型进行数据绑定。
POJO类型的绑定就是将所有关联的请求参数封装在一个POJO中,然后在方法中直接使用POJO作为形参来完成数据绑定。
例:
比如我们创建一个User类用来封装用户信息(这里的User类就是POJO):
public class User{
private String username;
private String password;
//setter、getter
}
处理器:
@RequestMapping("/registerUser")
//接收user
public void registerUser(User user){
String username = user.getUsername();
String password = user.getPassword();
System.out.println("username = " + username + ", password = " + password);
}
用户注册表单:
<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>
注意:POJO类型数据绑定时,客户端请求的参数名称(本例中指form表单内各元素name的属性值)必须与要绑定的POJO类中的属性名称保持一致。这样客户端发送请求时,请求数据才会自动绑定到处理器形参POJO对象中,否则处理器参数接收的值为null。
POST请求乱码问题
为了防止客户端传入的中文数据出现乱码,可以使用Spring提供的编码过滤器来统一编码。
在web.xml中配置编码过滤器:
<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>
GET请求乱码问题
对于get请求中文参数出现乱码,可以在使用参数之前重新编码。
如
String usernmae = new String(user.getUsername().getBytes("ISO8859-1"),"UTF-8");
其中ISO8859-1是Tomcat默认编码,需要将Tomcat编码后的内容再按UTF-8编码。