Spring MVC数据绑定和响应——简单数据绑定(三)POJO绑定

一、POJO数据绑定的使用场景

在使用简单数据类型绑定时,可以很容易的根据具体需求来定义方法中的形参类型和个数,然而在实际应用中,客户端请求可能会传递多个不同类型的参数数据,如果还使用简单数据类型进行绑定,那么就需要手动编写多个不同类型的参数,这种操作显然比较繁琐。为解决这个问题,可以使用POJO类型进行数据绑定。

二、POJO数据绑定的概念

POJO类型的数据绑定就是将所有关联的请求参数封装在一个POJO中,然后在方法中直接使用该POJO作为形参来完成数据绑定。

下面通过用户注册案例演示POJO的数据绑定,该案例要求表单提交的数据绑定在处理器User类型的形参中,案例具体实现步骤如下所示。

1、创建一个User类用于封装用户信息。

java 复制代码
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;
    }
}

2、在UserController.java类中,定义registerUser( )方法用于接收用户注册信息。

java 复制代码
// 接收表单用户信息
@RequestMapping("/registerUser")
public void registerUser(User user) {
    	String username = user.getUsername();
    	String password = user.getPassword(); 	System.out.println("username="+username+",password="+password);
}

3、创建register.jsp文件,在register.jsp中编写用户注册表单。

java 复制代码
<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 />
     密&nbsp;&nbsp;&nbsp;码:<input type="password" name="password" /><br />
<input type="submit" value="注册"/>
    </form></body>	
</html>

三、POJO绑定时参数名称问题

在POJO类型数据绑定时,客户端请求的参数名称(本例中指form表单内各元素name的属性值)必须与要绑定的POJO类中的属性名称保持一致。这样客户端发送请求时,请求数据才会自动绑定到处理器形参POJO对象中,否则处理器参数接收的值为null。

4、启动chapter12项目,在浏览器中访问register.jsp页面,访问地址为http://localhost:8080/chapter12/register.jsp。

5、在register.jsp所示页面的表单中,分别填写注册的用户名为"enjoy",密码为"123",然后单击"注册"按钮即可完成注册数据的提交。当单击"注册"按钮后,控制台打印信息如图所示。

java 复制代码
username=enjoy,password=123

从图中可以看出,程序成功打印出了用户名和密码。这表明registerUser()方法获取到了客户端请求中的参数username和参数password的值,并将username和password的值分别赋给了getUserNameAndId( )方法中user形参的username属性和password属性,实现了POJO数据绑定。

(四)解决请求参数中的中文乱码问题

1、在客户端请求中,难免会有中文信息传递,例如,在register.jsp中的用户名输入框中输入用户名"享受"请求时,虽然registerUser( )方法可以获取到user的属性值,但是在控制台中打印的信息却出现了乱码,控制台打印乱码信息。

2、为了防止客户端传入的中文数据出现乱码,可以使用Spring提供的编码过滤器来统一编码。要使用编码过滤器,只需要在web.xml中添加如下代码。

html 复制代码
<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的编码格式进行解析。

3、配置完成后,再次在注册页面中输入中文用户名"黑马"以及密码"123",此时控制台正确打印中文信息,如图所示。

java 复制代码
username=享受,password=123

从图中所示的打印信息可以看出,服务器端正确获取中文数据,这说明编码过滤器配置成功。

以上可以解决post请求乱码问题,对于get请求中文参数出现乱码,可以在使用参数之前重新编码,如String username = new String(user.getUsername().getBytes("ISO8859-1"),"UTF-8");,其中ISO8859-1是Tomcat默认编码,需要将Tomcat编码后的内容再按UTF-8编码。

相关推荐
_Rookie._几秒前
java 单例模式
java·开发语言·单例模式
hummhumm15 分钟前
数据结构第08小节:双端队列
java·数据结构·spring boot·spring·java-ee·maven·intellij-idea
梦中北山18 分钟前
JWT安全分析
开发语言·网络·安全·web安全·php
编程刘明31 分钟前
学会拥抱Python六剑客,提高编程效率
开发语言·数据库·python·程序人生·职场和发展·学习方法
不吃饭的猪31 分钟前
【无标题】
java·开发语言·docker
不会编程的小孩子31 分钟前
python 基础综合应用——小开发
开发语言·python
六月的雨__31 分钟前
二手物品交易小程序的设计
java·sql·学习·小程序
firepation35 分钟前
使用 Spring 配置数据库连接池:HikariCP 与 Apache DBCP
spring
happy_plus44 分钟前
AutoX.js从某音分享链接解析出视频ID
开发语言·javascript·ecmascript